1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522 |
- Index: ChangeLog
- ===================================================================
- RCS file: /cvs/gcc/gcc/ChangeLog,v
- retrieving revision 1.621.2.52
- retrieving revision 1.621.2.53
- diff -u -r1.621.2.52 -r1.621.2.53
- --- gcc/ChangeLog 30 Sep 2004 16:47:59 -0000 1.621.2.52
- +++ gcc/ChangeLog 6 Oct 2004 12:00:52 -0000 1.621.2.53
- @@ -1,3 +1,7 @@
- +2004-10-06 Josef Zlomek <josef.zlomek@email.cz>
- +
- + * MAINTAINERS: Update my e-mail address.
- +
- 2004-09-30 Release Manager
-
- * GCC 3.3.5 Released.
- Index: MAINTAINERS
- ===================================================================
- RCS file: /cvs/gcc/gcc/MAINTAINERS,v
- retrieving revision 1.253.2.18
- retrieving revision 1.253.2.19
- diff -u -r1.253.2.18 -r1.253.2.19
- --- gcc/MAINTAINERS 16 Jan 2004 23:33:12 -0000 1.253.2.18
- +++ gcc/MAINTAINERS 6 Oct 2004 12:00:53 -0000 1.253.2.19
- @@ -258,7 +258,7 @@
- John Wehle john@feith.com
- Florian Weimer fw@deneb.enyo.de
- Mark Wielaard mark@gcc.gnu.org
- -Josef Zlomek zlomekj@suse.cz
- +Josef Zlomek josef.zlomek@email.cz
-
- GNATS only accounts
-
- Index: gcc/ChangeLog
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/ChangeLog,v
- retrieving revision 1.16114.2.1019
- retrieving revision 1.16114.2.1059
- diff -u -r1.16114.2.1019 -r1.16114.2.1059
- --- gcc/gcc/ChangeLog 30 Sep 2004 16:45:01 -0000 1.16114.2.1019
- +++ gcc/gcc/ChangeLog 29 Jan 2005 11:53:57 -0000 1.16114.2.1059
- @@ -1,3 +1,314 @@
- +2005-01-29 Alan Modra <amodra@bigpond.net.au>
- +
- + * unwind-dw2.c (execute_stack_op): Add missing cases for
- + DW_OP_shl, DW_OP_shr, DW_OP_shra, DW_OP_xor.
- +
- +2005-01-28 Stephane Carrez <stcarrez@nerim.fr>
- +
- + PR target/15384
- + * config/m68hc11/t-m68hc11-gas (dp-bit.c): Fix typo causing a
- + configuration part of dp-bit.c to be lost.
- +
- +2005-01-27 Ulrich Weigand <uweigand@de.ibm.com>
- +
- + PR target/17771
- + Backport from mainline:
- + * config/s390/s390.md ("reload_outti"): Remove predicate for
- + output operand. Abort if operand is not a MEM.
- + ("reload_outdi", "reload_outdf"): Likewise.
- +
- +2005-01-22 Roger Sayle <roger@eyesopen.com>
- +
- + PR target/18402
- + Backport from mainline
- + 2003-02-05 Jakub Jelinek <jakub@redhat.com>
- +
- + PR optimization/8555
- + * config/i386/i386.md (sse_mov?fcc split): Handle op2 == op3 case
- + instead of aborting.
- +
- +2005-01-21 Giovanni Bajo <giovannibajo@gcc.gnu.org>
- +
- + * gccbug.in: Update optimization -> tree-optimization/rtl-optimization.
- +
- +2005-01-21 Giovanni Bajo <giovannibajo@gcc.gnu.org>
- +
- + PR c++/17115
- + * tree-inline.c (expand_call_inline): Do not warn for functions
- + marked with attribute noinline.
- +
- +2005-01-18 Eric Botcazou <ebotcazou@libertysurf.fr>
- +
- + PR rtl-optimization/19296
- + * combine.c (simplify_comparison): Rewrite the condition under
- + which a non-paradoxical SUBREG of a PLUS can be lifted when
- + compared against a constant.
- +
- +2004-01-14 David Mosberger <davidm@hpl.hp.com>
- + James E Wilson <wilson@specifixinc.com>
- +
- + PR target/18987
- + * config/ia64/ia64.c (process_set): For alloc insn, only call
- + process_epilogue is !frame_pointer_needed.
- +
- + PR target/13158
- + * config/ia64/ia64.c (ia64_expand_epilogue): Set RTX_FRAME_RELATED_P on
- + sibcall alloc instruction.
- + (process_set): Handle sibcall alloc instruction.
- +
- +2005-01-13 David O'Brien <obrien@FreeBSD.org>
- +
- + Backport from mainline:
- + * config/freebsd-spec.h: Use KSE pthread lib for -pthread.
- +
- +2005-01-08 Sergey M. Samoylov <ssamoylov@dev.rtsoft.ru>
- +
- + Backport:
- + 2004-02-12 Richard Sandiford <rsandifo@redhat.com>
- + PR bootstrap/13617
- + * config/mips/mips-protos.h (mips_output_aligned_decl_common): Declare.
- + (mips_declare_object): Make variadic.
- + * config/mips/mips.h (ASM_OUTPUT_ALIGNED_DECL_COMMON): Use
- + mips_output_aligned_decl_common.
- + * config/mips/mips.c (mips_output_aligned_decl_common): New function.
- + (mips_declare_object): Make variadic.
- +
- +2005-01-08 Richard Sandiford <rsandifo@redhat.com>
- +
- + PR target/17565
- + * config/mips/mips.md (define_asm_attributes): Set can_delay to no.
- +
- +2004-12-27 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
- +
- + * vax.c (vax_address_cost, vax_rtx_cost): Correct casts.
- + (vax_rtx_cost): Handle small offsets for both PLUS and MINUS.
- +
- +2004-12-27 Steven Bosscher <stevenb@suse.de>
- + John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
- +
- + rtl-optimization/12863
- + * config/vax/vax.h (CASE_DROPS_THROUGH): Don't define.
- + * config/vax/vax.md (casesi): Emit a test-and-branch to make sure
- + that the case is in range, to make sure the casesi insn is always
- + in range and never falls through.
- + (casesi1): Add comment to explain why casesi never falls through.
- + Remove the unnamed special case casesi pattern.
- +
- +2004-12-26 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
- +
- + PR target/17643
- + * config/pa/pa32-linux.h (FUNCTION_OK_FOR_SIBCALL): Return false when
- + TARGET_PORTABLE_RUNTIME is true.
- +
- +2004-12-25 Alan Modra <amodra@bigpond.net.au>
- +
- + PR target/19147
- + * config/rs6000/rs6000.md (andsi3_internal7, andsi3_internal8): Delete.
- +
- +2004-12-21 Joseph S. Myers <jsm@polyomino.org.uk>
- +
- + PR c/14765
- + * c-parse.in (compstmt_primary_start): Set last_expr_type to
- + NULL_TREE.
- +
- +2004-12-19 Roger Sayle <roger@eyesopen.com>
- +
- + PR middle-end/19068
- + * expr.c (expand_expr_real_1) <MAX_EXPR>: Ensure that target, op0
- + and op1 are all registers (or constants) before expanding the RTL
- + comparison sequence [to avoid reg_overlap_mentioned (target, op1)].
- +
- +2004-12-16 Eric Botcazou <ebotcazou@adacore.com>
- +
- + PR middle-end/18882
- + * function.c (assign_stack_local_1): Use BITS_PER_UNIT alignment
- + when passed -2 as 'align'.
- + (put_var_into_stack): Adjust calls to put_reg_into_stack.
- + When passed a CONCAT, instruct put_reg_into_stack to use
- + a consecutive stack slot for the second part.
- + (put_reg_into_stack): Remove 'promoted_mode' parameter, add
- + 'consecutive_p' parameter. Retrieve the register mode from 'reg'.
- + When consecutive_p is true, instruct assign_stack_local_1 to use
- + BITS_PER_UNIT alignment.
- + (put_addressof_into_stack): Adjust call to put_reg_into_stack.
- +
- +2004-12-16 Eric Botcazou <ebotcazou@libertysurf.fr>
- +
- + PR middle-end/18590
- + * function.c (fixup_var_refs_insns_with_hash): Do not invoke
- + fixup_var_refs_insn on insns marked as deleted.
- +
- +2004-12-15 Richard Henderson <rth@redhat.com>
- +
- + PR target/19005
- + * config/i386/i386.md (swaphi_1): Swap with swaphi_2, allow with
- + optimize_size.
- + (swapqi_1): Rename from swapqi. Enable only for no partial reg
- + stall and optimize_size.
- + (swapqi_2): New.
- + (swaphi_1, swaphi_2, swapqi_1): Add athlon_decode.
- + (swapsi, swaphi_1, swaphi_2, swapqi_1, swapdi): Remove modrm override.
- +
- +2004-12-13 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
- +
- + PR middle-end/18730
- + * emit-rtl.c (get_first_nonnote_insn, get_last_nonnote_insn): When
- + the first/last insn is a sequence, return the first/last insn of the
- + sequence.
- +
- +2004-12-12 Richard Henderson <rth@redhat.com>
- +
- + PR target/18932
- + * config/i386/i386.md (all splits and peepholes): Use flags_reg_operand
- + and compare_operator to propagate the input CC mode to the output.
- + * config/i386/i386.c (flags_reg_operand, compare_operator): New.
- + * config/i386/i386.h (PREDICATE_CODES): Add them.
- + * config/i386/i386-protos.h: Update.
- +
- +2004-12-10 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
- +
- + PR rtl-optimization/16536
- + Backport from mainline:
- + 2004-06-25 Mark Mitchell <mark@codesourcery.com>
- + * alias.c (get_alias_set): Adjust setting of
- + DECL_POINTER_ALIAS_SET for pointers to aggregates.
- +
- +2004-12-09 Richard Henderson <rth@redhat.com>
- +
- + PR target/17025
- + * config/i386/i386.md (testqi_1_maybe_si, andqi_2_maybe_si): New.
- + (test_qi_1, andqi_2): Do not promote to simode.
- +
- +2004-12-07 David Mosberger <davidm@hpl.hp.com>
- +
- + PR target/18443
- + * config/ia64/ia64.c (ia64_assemble_integer): Add support for
- + emitting unaligned pointer-sized integers.
- +
- +2004-12-05 Richard Henderson <rth@redhat.com>
- +
- + PR target/18841
- + * config/alpha/alpha.md (UNSPECV_SETJMPR_ER): New.
- + (builtin_setjmp_receiver_er_sl_1): Use it.
- + (builtin_setjmp_receiver_er_1): Likewise.
- + (builtin_setjmp_receiver_er, exception_receiver_er): Remove.
- + (builtin_setjmp_receiver): Don't split for explicit relocs until
- + after reload.
- + (exception_receiver): Likewise.
- +
- +2004-12-03 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
- +
- + 2003-10-31 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
- + Backport from mainline
- + * aclocal.m4 (gcc_AC_FUNC_MMAP_BLACKLIST): Blacklist ultrix*.
- + * configure: Rebuilt.
- +
- +2004-12-03 Richard Henderson <rth@redhat.com>
- +
- + 2004-09-24 Richard Henderson <rth@redhat.com>
- + PR rtl-opt/17503
- + * regclass.c (subregs_of_mode): Turn into an htab. Make static.
- + (som_hash, som_eq): New.
- + (init_subregs_of_mode, record_subregs_of_mode): New.
- + (cannot_change_mode_set_regs): Rewrite for htab implementation.
- + (invalid_mode_change_p): Likewise.
- + * combine.c (gen_lowpart_for_combine): Use record_subregs_of_mode.
- + * flow.c (mark_used_regs): Likewise.
- + (life_analysis): Use init_subregs_of_mode.
- + * regs.h (subregs_of_mode): Remove.
- + * rtl.h (init_subregs_of_mode, record_subregs_of_mode): Declare.
- +
- +2004-12-03 Roger Sayle <roger@eyesopen.com>
- +
- + PR target/9908
- + * config/i386/i386.md (*call_value_1): Correct Intel assembler
- + syntax by using %A1 instead of %*%1.
- +
- +2004-12-01 Alan Modra <amodra@bigpond.net.au>
- +
- + PR target/12817
- + * config/rs6000/rs6000.c (rs6000_emit_prologue): Use r0 for vrsave.
- +
- +2004-11-29 Roger Sayle <roger@eyesopen.com>
- +
- + PR rtl-optimization/9771
- + * regclass.c (CALL_REALLY_USED_REGNO_P): New macro to eliminate
- + conditional compilation in init_reg_sets_1.
- + (init_reg_sets_1): Let global_regs[i] take priority over the frame
- + (but not stack) pointer exceptions to regs_invalidated_by_call.
- + (globalize_reg): Globalizing a fixed register may need to update
- + regs_invalidated_by_call.
- +
- +2004-11-27 Falk Hueffner <falk@debian.org>
- + Eric Botcazou <ebotcazou@libertysurf.fr>
- +
- + PR optimization/18577
- + * unroll.c (unroll_loop): Test both REGNO_LAST_UID and
- + REGNO_LAST_NOTE_UID to decide whether a pseudo is local
- + to the loop.
- +
- +2004-11-27 Alan Modra <amodra@bigpond.net.au>
- +
- + PR target/12769
- + * config/rs6000/rs6000.c (init_cumulative_args): Set call_cookie
- + from rs6000_default_long_calls for libcalls.
- +
- +2004-11-25 Richard Henderson <rth@redhat.com>
- +
- + PR c++/6764
- + * reload1.c (set_initial_eh_label_offset): New.
- + (set_initial_label_offsets): Use it.
- +
- +2004-11-22 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
- +
- + PR rtl-optimization/14838
- + * emit-rtl.c (get_first_nonnote_insn): Don't assume first insn is a
- + note.
- + (get_last_nonnote_insn): Don't assume last insn is a note.
- +
- +2004-10-14 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
- +
- + * doc/install.texi (*-*-solaris2*): Update with info about kernel
- + patches to solve spurious testsuite failures.
- +
- +2004-10-13 Eric Botcazou <ebotcazou@libertysurf.fr>
- +
- + PR target/14454
- + * config/sparc/sparc.c (TARGET_ASM_CAN_OUTPUT_MI_THUNK): Set to
- + sparc_can_output_mi_thunk.
- + (sparc_output_mi_thunk): Simplify handling of delta offset. Add
- + handling of vcall offset.
- + (sparc_can_output_mi_thunk): New predicate.
- + * doc/tm.texi (TARGET_ASM_OUTPUT_MI_THUNK): Document VCALL_OFFSET.
- + (TARGET_ASM_OUTPUT_MI_VCALL_THUNK): Delete.
- + (TARGET_ASM_CAN_OUTPUT_MI_THUNK): New target hook.
- +
- + * config/sparc/sparc.md (movdi): Remove redundant test.
- +
- +2004-10-07 Eric Botcazou <ebotcazou@libertysurf.fr>
- +
- + * doc/install.texi (*-*-solaris2*): Fix marker for URL.
- +
- +2004-10-06 Eric Botcazou <ebotcazou@libertysurf.fr>
- +
- + PR target/16007
- + * doc/install.texi (*-*-solaris2*): Mention potential problem
- + with Sun assembler + GNU linker and C++ programs.
- + Document status of binutils 2.15 release.
- +
- +2004-09-30 Richard Henderson <rth@redhat.com>
- +
- + * config/alpha/qrnnd.asm: Mark for noexecstack.
- +
- +2004-09-30 Richard Henderson <rth@redhat.com>
- +
- + * unwind-dw2.c (_Unwind_GetGR): Honor DWARF_ZERO_REG.
- + * doc/tm.texi (DWARF_ZERO_REG): New.
- +
- + * config/alpha/alpha.c (alpha_sa_mask, alpha_expand_prologue,
- + alpha_expand_epilogue): Revert 2003-09-30 change to store zero.
- + * config/alpha/alpha.h (DWARF_ZERO_REG): New.
- +
- 2004-09-30 Release Manager
-
- * GCC 3.3.5 Released.
- @@ -19,12 +330,12 @@
-
- 2004-09-13 Richard Henderson <rth@redhat.com>
-
- - PR inline-asm/6806
- - * cselib.c (cselib_invalidate_rtx): Export. Remove unused args.
- - (cselib_invalidate_rtx_note_stores): New.
- - (cselib_record_sets, cselib_process_insn): Update to match.
- - * cselib.h (cselib_invalidate_rtx): Declare.
- - * reload1.c (reload_cse_simplify): Invalidate asm clobbers.
- + PR inline-asm/6806
- + * cselib.c (cselib_invalidate_rtx): Export. Remove unused args.
- + (cselib_invalidate_rtx_note_stores): New.
- + (cselib_record_sets, cselib_process_insn): Update to match.
- + * cselib.h (cselib_invalidate_rtx): Declare.
- + * reload1.c (reload_cse_simplify): Invalidate asm clobbers.
-
- 2004-08-29 Jonathan Wakely <redi@gcc.gnu.org>
-
- @@ -83,7 +394,7 @@
- 2004-07-25 Andreas Jaeger <aj@suse.de>
-
- Backport from mainline:
- - * libgcc-std.ver: Add __unorddf2 and __unordsf2 with version 3.3.4.
- + * libgcc-std.ver: Add __unorddf2 and __unordsf2 with version 3.3.4.
-
- 2004-07-25 Kaz Kojima <kkojima@gcc.gnu.org>
-
- @@ -155,14 +466,14 @@
- side-effect of having a length greater or equal to 3.
-
- 2004-07-13 Eric Botcazou <ebotcazou@libertysurf.fr>
- - Lloyd Parkes <lloyd@must-have-coffee.gen.nz>
- + Lloyd Parkes <lloyd@must-have-coffee.gen.nz>
-
- PR target/15186
- * config/sparc/sol2-bi.h (LINK_ARCH64_SPEC_BASE): Pass
- /usr/ucblib/sparcv9 as -R path when -compat-bsd is specified.
-
- 2004-07-13 Eric Botcazou <ebotcazou@libertysurf.fr>
- - Martin Sebor <sebor@roguewave.com>
- + Martin Sebor <sebor@roguewave.com>
-
- PR target/12602
- * doc/invoke.texi (SPARC options): Document -threads
- @@ -252,18 +563,18 @@
-
- Backport from mainline:
- 2004-01-19 Richard Henderson <rth@redhat.com>
- - * alpha.md (UNSPEC_NT_LDA): Renumber.
- - (UNSPEC_CVTLQ, cvtlq): New.
- - (extendsidi2_1): Rename from extendsidi2_nofix; remove f/f.
- - (extendsidi2_fix): Remove.
- - (extendsidi2 splitter): Use cvtlq.
- - (extendsidi2 fp peepholes): Remove.
- - (cvtql): Use SFmode instead of SImode.
- - (fix_trunc?fsi): Update to match.
- - (floatsisf2_ieee, floatsisf2, floatsidf2_ieee, floatsidf2): New.
- - (movsi): Rename from movsi_nofix, remove f alternatives.
- - (movsi_nt_vms): Similarly.
- - (movsi_fix, movsi_nt_vms_fix): Remove.
- + * alpha.md (UNSPEC_NT_LDA): Renumber.
- + (UNSPEC_CVTLQ, cvtlq): New.
- + (extendsidi2_1): Rename from extendsidi2_nofix; remove f/f.
- + (extendsidi2_fix): Remove.
- + (extendsidi2 splitter): Use cvtlq.
- + (extendsidi2 fp peepholes): Remove.
- + (cvtql): Use SFmode instead of SImode.
- + (fix_trunc?fsi): Update to match.
- + (floatsisf2_ieee, floatsisf2, floatsidf2_ieee, floatsidf2): New.
- + (movsi): Rename from movsi_nofix, remove f alternatives.
- + (movsi_nt_vms): Similarly.
- + (movsi_fix, movsi_nt_vms_fix): Remove.
-
- 2004-05-26 Hans-Peter Nilsson <hp@axis.com>
-
- Index: gcc/aclocal.m4
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/aclocal.m4,v
- retrieving revision 1.61.2.4
- retrieving revision 1.61.2.5
- diff -u -r1.61.2.4 -r1.61.2.5
- --- gcc/gcc/aclocal.m4 1 Oct 2003 21:56:34 -0000 1.61.2.4
- +++ gcc/gcc/aclocal.m4 4 Dec 2004 01:51:47 -0000 1.61.2.5
- @@ -413,7 +413,7 @@
- # read() to the same fd. The only system known to have a problem here
- # is VMS, where text files have record structure.
- case "$host_os" in
- - vms*)
- + vms* | ultrix*)
- gcc_cv_func_mmap_file=no ;;
- *)
- gcc_cv_func_mmap_file=yes;;
- Index: gcc/alias.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/alias.c,v
- retrieving revision 1.181.2.6
- retrieving revision 1.181.2.7
- diff -u -r1.181.2.6 -r1.181.2.7
- --- gcc/gcc/alias.c 28 May 2004 17:27:27 -0000 1.181.2.6
- +++ gcc/gcc/alias.c 10 Dec 2004 17:25:00 -0000 1.181.2.7
- @@ -508,6 +508,8 @@
- /* If we haven't computed the actual alias set, do it now. */
- if (DECL_POINTER_ALIAS_SET (decl) == -2)
- {
- + tree pointed_to_type = TREE_TYPE (TREE_TYPE (decl));
- +
- /* 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
- @@ -516,11 +518,22 @@
- 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)));
- + = get_alias_set (pointed_to_type);
-
- if (pointed_to_alias_set == 0)
- /* It's not legal to make a subset of alias set zero. */
- - ;
- + DECL_POINTER_ALIAS_SET (decl) = 0;
- + else if (AGGREGATE_TYPE_P (pointed_to_type))
- + /* For an aggregate, we must treat the restricted
- + pointer the same as an ordinary pointer. If we
- + were to make the type pointed to by the
- + restricted pointer a subset of the pointed-to
- + type, then we would believe that other subsets
- + of the pointed-to type (such as fields of that
- + type) do not conflict with the type pointed to
- + by the restricted pointer. */
- + DECL_POINTER_ALIAS_SET (decl)
- + = pointed_to_alias_set;
- else
- {
- DECL_POINTER_ALIAS_SET (decl) = new_alias_set ();
- Index: gcc/c-parse.in
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/c-parse.in,v
- retrieving revision 1.152.14.1
- retrieving revision 1.152.14.2
- diff -u -r1.152.14.1 -r1.152.14.2
- --- gcc/gcc/c-parse.in 28 Jan 2003 01:54:03 -0000 1.152.14.1
- +++ gcc/gcc/c-parse.in 21 Dec 2004 21:51:26 -0000 1.152.14.2
- @@ -2177,6 +2177,7 @@
- push_label_level ();
- compstmt_count++;
- $$ = add_stmt (build_stmt (COMPOUND_STMT, last_tree));
- + last_expr_type = NULL_TREE;
- }
- ;
-
- Index: gcc/combine.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/combine.c,v
- retrieving revision 1.325.2.17
- retrieving revision 1.325.2.19
- diff -u -r1.325.2.17 -r1.325.2.19
- --- gcc/gcc/combine.c 25 Jul 2004 18:49:54 -0000 1.325.2.17
- +++ gcc/gcc/combine.c 18 Jan 2005 08:39:05 -0000 1.325.2.19
- @@ -10138,13 +10138,8 @@
-
- result = gen_lowpart_common (mode, x);
- #ifdef CANNOT_CHANGE_MODE_CLASS
- - if (result != 0
- - && GET_CODE (result) == SUBREG
- - && GET_CODE (SUBREG_REG (result)) == REG
- - && REGNO (SUBREG_REG (result)) >= FIRST_PSEUDO_REGISTER)
- - bitmap_set_bit (&subregs_of_mode, REGNO (SUBREG_REG (result))
- - * MAX_MACHINE_MODE
- - + GET_MODE (result));
- + if (result != 0 && GET_CODE (result) == SUBREG)
- + record_subregs_of_mode (result);
- #endif
-
- if (result)
- @@ -10818,34 +10813,61 @@
- break;
-
- case SUBREG:
- - /* Check for the case where we are comparing A - C1 with C2,
- - both constants are smaller than 1/2 the maximum positive
- - value in MODE, and the comparison is equality or unsigned.
- - In that case, if A is either zero-extended to MODE or has
- - sufficient sign bits so that the high-order bit in MODE
- - is a copy of the sign in the inner mode, we can prove that it is
- - safe to do the operation in the wider mode. This simplifies
- - many range checks. */
- + /* Check for the case where we are comparing A - C1 with C2, that is
- +
- + (subreg:MODE (plus (A) (-C1))) op (C2)
- +
- + with C1 a constant, and try to lift the SUBREG, i.e. to do the
- + comparison in the wider mode. One of the following two conditions
- + must be true in order for this to be valid:
- +
- + 1. The mode extension results in the same bit pattern being added
- + on both sides and the comparison is equality or unsigned. As
- + C2 has been truncated to fit in MODE, the pattern can only be
- + all 0s or all 1s.
- +
- + 2. The mode extension results in the sign bit being copied on
- + each side.
- +
- + The difficulty here is that we have predicates for A but not for
- + (A - C1) so we need to check that C1 is within proper bounds so
- + as to perturbate A as little as possible. */
-
- if (mode_width <= HOST_BITS_PER_WIDE_INT
- && subreg_lowpart_p (op0)
- + && GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (op0))) > mode_width
- && GET_CODE (SUBREG_REG (op0)) == PLUS
- - && GET_CODE (XEXP (SUBREG_REG (op0), 1)) == CONST_INT
- - && INTVAL (XEXP (SUBREG_REG (op0), 1)) < 0
- - && (-INTVAL (XEXP (SUBREG_REG (op0), 1))
- - < (HOST_WIDE_INT) (GET_MODE_MASK (mode) / 2))
- - && (unsigned HOST_WIDE_INT) const_op < GET_MODE_MASK (mode) / 2
- - && (0 == (nonzero_bits (XEXP (SUBREG_REG (op0), 0),
- - GET_MODE (SUBREG_REG (op0)))
- - & ~GET_MODE_MASK (mode))
- - || (num_sign_bit_copies (XEXP (SUBREG_REG (op0), 0),
- - GET_MODE (SUBREG_REG (op0)))
- - > (unsigned int)
- - (GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (op0)))
- - - GET_MODE_BITSIZE (mode)))))
- + && GET_CODE (XEXP (SUBREG_REG (op0), 1)) == CONST_INT)
- {
- - op0 = SUBREG_REG (op0);
- - continue;
- + enum machine_mode inner_mode = GET_MODE (SUBREG_REG (op0));
- + rtx a = XEXP (SUBREG_REG (op0), 0);
- + HOST_WIDE_INT c1 = -INTVAL (XEXP (SUBREG_REG (op0), 1));
- +
- + if ((c1 > 0
- + && (unsigned HOST_WIDE_INT) c1
- + < (unsigned HOST_WIDE_INT) 1 << (mode_width - 1)
- + && (equality_comparison_p || unsigned_comparison_p)
- + /* (A - C1) zero-extends if it is positive and sign-extends
- + if it is negative, C2 both zero- and sign-extends. */
- + && ((0 == (nonzero_bits (a, inner_mode)
- + & ~GET_MODE_MASK (mode))
- + && const_op >= 0)
- + /* (A - C1) sign-extends if it is positive and 1-extends
- + if it is negative, C2 both sign- and 1-extends. */
- + || (num_sign_bit_copies (a, inner_mode)
- + > (unsigned int) (GET_MODE_BITSIZE (inner_mode)
- + - mode_width)
- + && const_op < 0)))
- + || ((unsigned HOST_WIDE_INT) c1
- + < (unsigned HOST_WIDE_INT) 1 << (mode_width - 2)
- + /* (A - C1) always sign-extends, like C2. */
- + && num_sign_bit_copies (a, inner_mode)
- + > (unsigned int) (GET_MODE_BITSIZE (inner_mode)
- + - mode_width - 1)))
- + {
- + op0 = SUBREG_REG (op0);
- + continue;
- + }
- }
-
- /* If the inner mode is narrower and we are extracting the low part,
- Index: gcc/configure
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/configure,v
- retrieving revision 1.641.2.23
- retrieving revision 1.641.2.24
- diff -u -r1.641.2.23 -r1.641.2.24
- --- gcc/gcc/configure 1 Apr 2004 16:55:23 -0000 1.641.2.23
- +++ gcc/gcc/configure 4 Dec 2004 01:51:43 -0000 1.641.2.24
- @@ -2399,7 +2399,7 @@
- fi
-
- # Find some useful tools
- -for ac_prog in gawk mawk nawk awk
- +for ac_prog in mawk gawk nawk awk
- do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- @@ -3947,7 +3947,7 @@
- # read() to the same fd. The only system known to have a problem here
- # is VMS, where text files have record structure.
- case "$host_os" in
- - vms*)
- + vms* | ultrix*)
- gcc_cv_func_mmap_file=no ;;
- *)
- gcc_cv_func_mmap_file=yes;;
- @@ -8120,7 +8120,7 @@
- echo "$ac_t""$gcc_cv_ld_eh_frame_hdr" 1>&6
-
- echo $ac_n "checking linker --as-needed support""... $ac_c" 1>&6
- -echo "configure:8250: checking linker --as-needed support" >&5
- +echo "configure:8124: checking linker --as-needed support" >&5
- gcc_cv_ld_as_needed=no
- if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then
- if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then
- @@ -8144,7 +8144,7 @@
- case "$target" in
- mips*-*-*)
- echo $ac_n "checking whether libgloss uses STARTUP directives consistently""... $ac_c" 1>&6
- -echo "configure:8127: checking whether libgloss uses STARTUP directives consistently" >&5
- +echo "configure:8148: checking whether libgloss uses STARTUP directives consistently" >&5
- gcc_cv_mips_libgloss_startup=no
- gcc_cv_libgloss_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/libgloss
- if test "x$exec_prefix" = xNONE; then
- @@ -8349,7 +8349,7 @@
-
-
- echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
- -echo "configure:8332: checking whether to enable maintainer-specific portions of Makefiles" >&5
- +echo "configure:8353: 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"
- Index: gcc/emit-rtl.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/emit-rtl.c,v
- retrieving revision 1.303.2.5
- retrieving revision 1.303.2.7
- diff -u -r1.303.2.5 -r1.303.2.7
- --- gcc/gcc/emit-rtl.c 18 Jun 2004 17:08:48 -0000 1.303.2.5
- +++ gcc/gcc/emit-rtl.c 14 Dec 2004 04:06:08 -0000 1.303.2.7
- @@ -2890,11 +2890,19 @@
- {
- rtx insn = first_insn;
-
- - while (insn)
- + if (insn)
- {
- - insn = next_insn (insn);
- - if (insn == 0 || GET_CODE (insn) != NOTE)
- - break;
- + if (NOTE_P (insn))
- + for (insn = next_insn (insn);
- + insn && NOTE_P (insn);
- + insn = next_insn (insn))
- + continue;
- + else
- + {
- + if (GET_CODE (insn) == INSN
- + && GET_CODE (PATTERN (insn)) == SEQUENCE)
- + insn = XVECEXP (PATTERN (insn), 0, 0);
- + }
- }
-
- return insn;
- @@ -2908,11 +2916,20 @@
- {
- rtx insn = last_insn;
-
- - while (insn)
- + if (insn)
- {
- - insn = previous_insn (insn);
- - if (insn == 0 || GET_CODE (insn) != NOTE)
- - break;
- + if (NOTE_P (insn))
- + for (insn = previous_insn (insn);
- + insn && NOTE_P (insn);
- + insn = previous_insn (insn))
- + continue;
- + else
- + {
- + if (GET_CODE (insn) == INSN
- + && GET_CODE (PATTERN (insn)) == SEQUENCE)
- + insn = XVECEXP (PATTERN (insn), 0,
- + XVECLEN (PATTERN (insn), 0) - 1);
- + }
- }
-
- return insn;
- Index: gcc/expr.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/expr.c,v
- retrieving revision 1.498.2.31
- retrieving revision 1.498.2.32
- diff -u -r1.498.2.31 -r1.498.2.32
- --- gcc/gcc/expr.c 16 May 2004 20:27:15 -0000 1.498.2.31
- +++ gcc/gcc/expr.c 20 Dec 2004 02:43:00 -0000 1.498.2.32
- @@ -8462,9 +8462,14 @@
- /* At this point, a MEM target is no longer useful; we will get better
- code without it. */
-
- - if (GET_CODE (target) == MEM)
- + if (! REG_P (target))
- target = gen_reg_rtx (mode);
-
- + /* We generate better code and avoid problems with op1 mentioning
- + target by forcing op1 into a pseudo if it isn't a constant. */
- + if (! CONSTANT_P (op1))
- + op1 = force_reg (mode, op1);
- +
- if (target != op0)
- emit_move_insn (target, op0);
-
- Index: gcc/flow.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/flow.c,v
- retrieving revision 1.541.2.6
- retrieving revision 1.541.2.7
- diff -u -r1.541.2.6 -r1.541.2.7
- --- gcc/gcc/flow.c 5 Mar 2004 17:55:50 -0000 1.541.2.6
- +++ gcc/gcc/flow.c 4 Dec 2004 00:36:35 -0000 1.541.2.7
- @@ -431,9 +431,8 @@
- SET_HARD_REG_BIT (elim_reg_set, FRAME_POINTER_REGNUM);
- #endif
-
- -
- #ifdef CANNOT_CHANGE_MODE_CLASS
- - bitmap_initialize (&subregs_of_mode, 1);
- + init_subregs_of_mode ();
- #endif
-
- if (! optimize)
- @@ -3851,11 +3850,7 @@
-
- case SUBREG:
- #ifdef CANNOT_CHANGE_MODE_CLASS
- - if (GET_CODE (SUBREG_REG (x)) == REG
- - && REGNO (SUBREG_REG (x)) >= FIRST_PSEUDO_REGISTER)
- - bitmap_set_bit (&subregs_of_mode, REGNO (SUBREG_REG (x))
- - * MAX_MACHINE_MODE
- - + GET_MODE (x));
- + record_subregs_of_mode (x);
- #endif
-
- /* While we're here, optimize this case. */
- @@ -3900,12 +3895,8 @@
- || GET_CODE (testreg) == SUBREG)
- {
- #ifdef CANNOT_CHANGE_MODE_CLASS
- - if (GET_CODE (testreg) == SUBREG
- - && GET_CODE (SUBREG_REG (testreg)) == REG
- - && REGNO (SUBREG_REG (testreg)) >= FIRST_PSEUDO_REGISTER)
- - bitmap_set_bit (&subregs_of_mode, REGNO (SUBREG_REG (testreg))
- - * MAX_MACHINE_MODE
- - + GET_MODE (testreg));
- + if (GET_CODE (testreg) == SUBREG)
- + record_subregs_of_mode (testreg);
- #endif
-
- /* Modifying a single register in an alternate mode
- Index: gcc/function.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/function.c,v
- retrieving revision 1.389.2.16
- retrieving revision 1.389.2.18
- diff -u -r1.389.2.16 -r1.389.2.18
- --- gcc/gcc/function.c 16 May 2004 20:27:16 -0000 1.389.2.16
- +++ gcc/gcc/function.c 16 Dec 2004 14:04:34 -0000 1.389.2.18
- @@ -226,9 +226,8 @@
- int, struct function *));
- 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,
- - int, unsigned int, int,
- - htab_t));
- + enum machine_mode, unsigned int,
- + int, int, int, htab_t));
- static void schedule_fixup_var_refs PARAMS ((struct function *, rtx, tree,
- enum machine_mode,
- htab_t));
- @@ -508,6 +507,7 @@
- ALIGN controls the amount of alignment for the address of the slot:
- 0 means according to MODE,
- -1 means use BIGGEST_ALIGNMENT and round size to multiple of that,
- + -2 means use BITS_PER_UNIT,
- positive specifies alignment boundary in bits.
-
- We do not round to stack_boundary here.
- @@ -548,6 +548,8 @@
- alignment = BIGGEST_ALIGNMENT / BITS_PER_UNIT;
- size = CEIL_ROUND (size, alignment);
- }
- + else if (align == -2)
- + alignment = 1; /* BITS_PER_UNIT / BITS_PER_UNIT */
- else
- alignment = align / BITS_PER_UNIT;
-
- @@ -1342,9 +1344,9 @@
- enum machine_mode promoted_mode, decl_mode;
- struct function *function = 0;
- tree context;
- - int can_use_addressof;
- - int volatilep = TREE_CODE (decl) != SAVE_EXPR && TREE_THIS_VOLATILE (decl);
- - int usedp = (TREE_USED (decl)
- + int can_use_addressof_p;
- + int volatile_p = TREE_CODE (decl) != SAVE_EXPR && TREE_THIS_VOLATILE (decl);
- + int used_p = (TREE_USED (decl)
- || (TREE_CODE (decl) != SAVE_EXPR && DECL_INITIAL (decl) != 0));
-
- context = decl_function_context (decl);
- @@ -1391,7 +1393,7 @@
- /* If this variable lives in the current function and we don't need to put it
- in the stack for the sake of setjmp or the non-locality, try to keep it in
- a register until we know we actually need the address. */
- - can_use_addressof
- + can_use_addressof_p
- = (function == 0
- && ! (TREE_CODE (decl) != SAVE_EXPR && DECL_NONLOCAL (decl))
- && optimize > 0
- @@ -1404,7 +1406,8 @@
-
- /* If we can't use ADDRESSOF, make sure we see through one we already
- generated. */
- - if (! can_use_addressof && GET_CODE (reg) == MEM
- + if (! can_use_addressof_p
- + && GET_CODE (reg) == MEM
- && GET_CODE (XEXP (reg, 0)) == ADDRESSOF)
- reg = XEXP (XEXP (reg, 0), 0);
-
- @@ -1412,11 +1415,11 @@
-
- if (GET_CODE (reg) == REG)
- {
- - if (can_use_addressof)
- + if (can_use_addressof_p)
- gen_mem_addressof (reg, decl, rescan);
- else
- - put_reg_into_stack (function, reg, TREE_TYPE (decl), promoted_mode,
- - decl_mode, volatilep, 0, usedp, 0);
- + put_reg_into_stack (function, reg, TREE_TYPE (decl), decl_mode,
- + 0, volatile_p, used_p, 0, 0);
- }
- else if (GET_CODE (reg) == CONCAT)
- {
- @@ -1432,14 +1435,14 @@
- #ifdef FRAME_GROWS_DOWNWARD
- /* Since part 0 should have a lower address, do it second. */
- put_reg_into_stack (function, hipart, part_type, part_mode,
- - part_mode, volatilep, 0, 0, 0);
- + 0, volatile_p, 0, 0, 0);
- put_reg_into_stack (function, lopart, part_type, part_mode,
- - part_mode, volatilep, 0, 0, 0);
- + 0, volatile_p, 0, 1, 0);
- #else
- put_reg_into_stack (function, lopart, part_type, part_mode,
- - part_mode, volatilep, 0, 0, 0);
- + 0, volatile_p, 0, 0, 0);
- put_reg_into_stack (function, hipart, part_type, part_mode,
- - part_mode, volatilep, 0, 0, 0);
- + 0, volatile_p, 0, 1, 0);
- #endif
-
- /* Change the CONCAT into a combined MEM for both parts. */
- @@ -1460,7 +1463,7 @@
- /* Prevent sharing of rtl that might lose. */
- if (GET_CODE (XEXP (reg, 0)) == PLUS)
- XEXP (reg, 0) = copy_rtx (XEXP (reg, 0));
- - if (usedp && rescan)
- + if (used_p && rescan)
- {
- schedule_fixup_var_refs (function, reg, TREE_TYPE (decl),
- promoted_mode, 0);
- @@ -1474,26 +1477,29 @@
-
- /* Subroutine of put_var_into_stack. This puts a single pseudo reg REG
- into the stack frame of FUNCTION (0 means the current function).
- + TYPE is the user-level data type of the value hold in the register.
- DECL_MODE is the machine mode of the user-level data type.
- - PROMOTED_MODE is the machine mode of the register.
- - VOLATILE_P is nonzero if this is for a "volatile" decl.
- - USED_P is nonzero if this reg might have already been used in an insn. */
- + ORIGINAL_REGNO must be set if the real regno is not visible in REG.
- + VOLATILE_P is true if this is for a "volatile" decl.
- + USED_P is true if this reg might have already been used in an insn.
- + CONSECUTIVE_P is true if the stack slot assigned to reg must be
- + consecutive with the previous stack slot. */
-
- static void
- -put_reg_into_stack (function, reg, type, promoted_mode, decl_mode, volatile_p,
- - original_regno, used_p, ht)
- +put_reg_into_stack (function, reg, type, decl_mode, original_regno,
- + volatile_p, used_p, consecutive_p, ht)
- struct function *function;
- rtx reg;
- tree type;
- - enum machine_mode promoted_mode, decl_mode;
- - int volatile_p;
- + enum machine_mode decl_mode;
- unsigned int original_regno;
- - int used_p;
- + int volatile_p, used_p, consecutive_p;
- htab_t ht;
- {
- struct function *func = function ? function : cfun;
- - rtx new = 0;
- + enum machine_mode mode = GET_MODE (reg);
- unsigned int regno = original_regno;
- + rtx new = 0;
-
- if (regno == 0)
- regno = REGNO (reg);
- @@ -1506,7 +1512,8 @@
- }
-
- if (new == 0)
- - new = assign_stack_local_1 (decl_mode, GET_MODE_SIZE (decl_mode), 0, func);
- + new = assign_stack_local_1 (decl_mode, GET_MODE_SIZE (decl_mode),
- + consecutive_p ? -2 : 0, func);
-
- PUT_CODE (reg, MEM);
- PUT_MODE (reg, decl_mode);
- @@ -1528,7 +1535,7 @@
- }
-
- if (used_p)
- - schedule_fixup_var_refs (function, reg, type, promoted_mode, ht);
- + schedule_fixup_var_refs (function, reg, type, mode, ht);
- }
-
- /* Make sure that all refs to the variable, previously made
- @@ -1716,7 +1723,7 @@
- tmp.key = var;
- ime = (struct insns_for_mem_entry *) htab_find (ht, &tmp);
- for (insn_list = ime->insns; insn_list != 0; insn_list = XEXP (insn_list, 1))
- - if (INSN_P (XEXP (insn_list, 0)))
- + if (INSN_P (XEXP (insn_list, 0)) && !INSN_DELETED_P (XEXP (insn_list, 0)))
- fixup_var_refs_insn (XEXP (insn_list, 0), var, promoted_mode,
- unsignedp, 1, may_share);
- }
- @@ -3025,8 +3032,8 @@
- used_p = 1;
- }
-
- - put_reg_into_stack (0, reg, type, GET_MODE (reg), GET_MODE (reg),
- - volatile_p, ADDRESSOF_REGNO (r), used_p, ht);
- + put_reg_into_stack (0, reg, type, GET_MODE (reg), ADDRESSOF_REGNO (r),
- + volatile_p, used_p, 0, ht);
- }
-
- /* List of replacements made below in purge_addressof_1 when creating
- Index: gcc/gccbug.in
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/gccbug.in,v
- retrieving revision 1.15.34.1
- retrieving revision 1.15.34.2
- diff -u -r1.15.34.1 -r1.15.34.2
- --- gcc/gcc/gccbug.in 2 Jan 2003 05:22:37 -0000 1.15.34.1
- +++ gcc/gcc/gccbug.in 21 Jan 2005 10:08:47 -0000 1.15.34.2
- @@ -198,7 +198,7 @@
- done
-
- # spam does not need to be listed here
- -CATEGORIES="ada bootstrap c++ c debug driver fortran inline-asm java libf2c libgcj libobjc libstdc++ middle-end objc optimization other preprocessor target web"
- +CATEGORIES="ada bootstrap c++ c debug driver fortran inline-asm java libf2c libgcj libobjc libstdc++ middle-end objc other preprocessor rtl-optimization target tree-optimization web"
-
- case "$FORMAT" in
- lisp) echo "$CATEGORIES" | \
- Index: gcc/regclass.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/regclass.c,v
- retrieving revision 1.160.4.5
- retrieving revision 1.160.4.8
- diff -u -r1.160.4.5 -r1.160.4.8
- --- gcc/gcc/regclass.c 3 Mar 2003 11:00:15 -0000 1.160.4.5
- +++ gcc/gcc/regclass.c 4 Dec 2004 00:36:37 -0000 1.160.4.8
- @@ -41,6 +41,7 @@
- #include "toplev.h"
- #include "output.h"
- #include "ggc.h"
- +#include "hashtab.h"
-
- #ifndef REGISTER_MOVE_COST
- #define REGISTER_MOVE_COST(m, x, y) 2
- @@ -105,6 +106,13 @@
- char call_really_used_regs[] = CALL_REALLY_USED_REGISTERS;
- #endif
-
- +#ifdef CALL_REALLY_USED_REGISTERS
- +#define CALL_REALLY_USED_REGNO_P(X) call_really_used_regs[X]
- +#else
- +#define CALL_REALLY_USED_REGNO_P(X) call_used_regs[X]
- +#endif
- +
- +
- /* Indexed by hard register number, contains 1 for registers that are
- fixed use or call used registers that cannot hold quantities across
- calls even if we are willing to save and restore them. call fixed
- @@ -228,12 +236,6 @@
-
- #endif /* FORBIDDEN_INC_DEC_CLASSES */
-
- -#ifdef CANNOT_CHANGE_MODE_CLASS
- -/* All registers that have been subreged. Indexed by regno * MAX_MACHINE_MODE
- - + mode. */
- -bitmap_head subregs_of_mode;
- -#endif
- -
- /* Sample MEM values for use by memory_move_secondary_cost. */
-
- static GTY(()) rtx top_of_stack[MAX_MACHINE_MODE];
- @@ -447,7 +449,11 @@
- 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 (i == STACK_POINTER_REGNUM)
- + ;
- + else if (global_regs[i])
- + SET_HARD_REG_BIT (regs_invalidated_by_call, i);
- + else if (i == FRAME_POINTER_REGNUM)
- ;
- #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
- else if (i == HARD_FRAME_POINTER_REGNUM)
- @@ -461,13 +467,7 @@
- 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])
- + else if (CALL_REALLY_USED_REGNO_P (i))
- SET_HARD_REG_BIT (regs_invalidated_by_call, i);
- }
-
- @@ -792,6 +792,12 @@
-
- global_regs[i] = 1;
-
- + /* If we're globalizing the frame pointer, we need to set the
- + appropriate regs_invalidated_by_call bit, even if it's already
- + set in fixed_regs. */
- + if (i != STACK_POINTER_REGNUM)
- + SET_HARD_REG_BIT (regs_invalidated_by_call, i);
- +
- /* If already fixed, nothing else to do. */
- if (fixed_regs[i])
- return;
- @@ -802,7 +808,6 @@
- SET_HARD_REG_BIT (fixed_reg_set, i);
- SET_HARD_REG_BIT (call_used_reg_set, i);
- SET_HARD_REG_BIT (call_fixed_reg_set, i);
- - SET_HARD_REG_BIT (regs_invalidated_by_call, i);
- }
-
- /* Now the data and code for the `regclass' pass, which happens
- @@ -2415,9 +2420,15 @@
-
- if (regno >= min_regno)
- {
- + /* While the following 3 lines means that the inequality
- + REGNO_LAST_UID (regno) <= REGNO_LAST_NOTE_UID (regno)
- + is true at the end of the scanning, it may be subsequently
- + invalidated (e.g. in load_mems) so it should not be relied
- + upon. */
- REGNO_LAST_NOTE_UID (regno) = INSN_UID (insn);
- if (!note_flag)
- REGNO_LAST_UID (regno) = INSN_UID (insn);
- +
- if (REGNO_FIRST_UID (regno) == 0)
- REGNO_FIRST_UID (regno) = INSN_UID (insn);
- /* If we are called by reg_scan_update() (indicated by min_regno
- @@ -2614,6 +2625,77 @@
- }
-
- #ifdef CANNOT_CHANGE_MODE_CLASS
- +
- +struct subregs_of_mode_node
- +{
- + unsigned int block;
- + unsigned char modes[MAX_MACHINE_MODE];
- +};
- +
- +static htab_t subregs_of_mode;
- +
- +static hashval_t som_hash PARAMS ((const void *));
- +static int som_eq PARAMS ((const void *, const void *));
- +
- +static hashval_t
- +som_hash (x)
- + const void *x;
- +{
- + const struct subregs_of_mode_node *a = x;
- + return a->block;
- +}
- +
- +static int
- +som_eq (x, y)
- + const void *x;
- + const void *y;
- +{
- + const struct subregs_of_mode_node *a = x;
- + const struct subregs_of_mode_node *b = y;
- + return a->block == b->block;
- +}
- +
- +void
- +init_subregs_of_mode ()
- +{
- + if (subregs_of_mode)
- + htab_empty (subregs_of_mode);
- + else
- + subregs_of_mode = htab_create (100, som_hash, som_eq, free);
- +}
- +
- +void
- +record_subregs_of_mode (subreg)
- + rtx subreg;
- +{
- + struct subregs_of_mode_node dummy, *node;
- + enum machine_mode mode;
- + unsigned int regno;
- + void **slot;
- +
- + if (!REG_P (SUBREG_REG (subreg)))
- + return;
- +
- + regno = REGNO (SUBREG_REG (subreg));
- + mode = GET_MODE (subreg);
- +
- + if (regno < FIRST_PSEUDO_REGISTER)
- + return;
- +
- + dummy.block = regno & -8;
- + slot = htab_find_slot_with_hash (subregs_of_mode, &dummy,
- + dummy.block, INSERT);
- + node = *slot;
- + if (node == NULL)
- + {
- + node = xcalloc (1, sizeof (*node));
- + node->block = regno & -8;
- + *slot = node;
- + }
- +
- + node->modes[mode] |= 1 << (regno & 7);
- +}
- +
- /* Set bits in *USED which correspond to registers which can't change
- their mode from FROM to any mode in which REGNO was encountered. */
-
- @@ -2623,42 +2705,50 @@
- enum machine_mode from;
- unsigned int regno;
- {
- + struct subregs_of_mode_node dummy, *node;
- enum machine_mode to;
- - int n, i;
- - int start = regno * MAX_MACHINE_MODE;
- + unsigned char mask;
- + unsigned int i;
-
- - EXECUTE_IF_SET_IN_BITMAP (&subregs_of_mode, start, n,
- - if (n >= MAX_MACHINE_MODE + start)
- - return;
- - to = n - start;
- - for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
- - if (! TEST_HARD_REG_BIT (*used, i)
- - && REG_CANNOT_CHANGE_MODE_P (i, from, to))
- - SET_HARD_REG_BIT (*used, i);
- - );
- + dummy.block = regno & -8;
- + node = htab_find_with_hash (subregs_of_mode, &dummy, dummy.block);
- + if (node == NULL)
- + return;
- +
- + mask = 1 << (regno & 7);
- + for (to = VOIDmode; to < NUM_MACHINE_MODES; to++)
- + if (node->modes[to] & mask)
- + for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
- + if (!TEST_HARD_REG_BIT (*used, i)
- + && REG_CANNOT_CHANGE_MODE_P (i, from, to))
- + SET_HARD_REG_BIT (*used, i);
- }
-
- /* Return 1 if REGNO has had an invalid mode change in CLASS from FROM
- mode. */
-
- bool
- -invalid_mode_change_p (regno, class, from_mode)
- +invalid_mode_change_p (regno, class, from)
- unsigned int regno;
- - enum reg_class class;
- - enum machine_mode from_mode;
- + enum reg_class class;
- + enum machine_mode from;
- {
- - enum machine_mode to_mode;
- - int n;
- - int start = regno * MAX_MACHINE_MODE;
- -
- - EXECUTE_IF_SET_IN_BITMAP (&subregs_of_mode, start, n,
- - if (n >= MAX_MACHINE_MODE + start)
- - return 0;
- - to_mode = n - start;
- - if (CANNOT_CHANGE_MODE_CLASS (from_mode, to_mode, class))
- - return 1;
- - );
- - return 0;
- + struct subregs_of_mode_node dummy, *node;
- + enum machine_mode to;
- + unsigned char mask;
- +
- + dummy.block = regno & -8;
- + node = htab_find_with_hash (subregs_of_mode, &dummy, dummy.block);
- + if (node == NULL)
- + return false;
- +
- + mask = 1 << (regno & 7);
- + for (to = VOIDmode; to < NUM_MACHINE_MODES; to++)
- + if (node->modes[to] & mask)
- + if (CANNOT_CHANGE_MODE_CLASS (from, to, class))
- + return true;
- +
- + return false;
- }
- #endif /* CANNOT_CHANGE_MODE_CLASS */
-
- Index: gcc/regs.h
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/regs.h,v
- retrieving revision 1.26.4.1
- retrieving revision 1.26.4.3
- diff -u -r1.26.4.1 -r1.26.4.3
- --- gcc/gcc/regs.h 3 Mar 2003 11:00:15 -0000 1.26.4.1
- +++ gcc/gcc/regs.h 4 Dec 2004 00:36:38 -0000 1.26.4.3
- @@ -49,6 +49,9 @@
- int first_uid; /* UID of first insn to use (REG n) */
- int last_uid; /* UID of last insn to use (REG n) */
- int last_note_uid; /* UID of last note to use (REG n) */
- + /* See the comment in reg_scan_mark_refs on
- + the relationship between last_uid and
- + last_note_uid. */
-
- /* fields set by reg_scan & flow_analysis */
- int sets; /* # of times (REG n) is set */
- @@ -66,8 +69,6 @@
-
- extern varray_type reg_n_info;
-
- -extern bitmap_head subregs_of_mode;
- -
- /* 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)
- Index: gcc/reload1.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/reload1.c,v
- retrieving revision 1.366.2.11
- retrieving revision 1.366.2.12
- diff -u -r1.366.2.11 -r1.366.2.12
- --- gcc/gcc/reload1.c 13 Sep 2004 08:54:35 -0000 1.366.2.11
- +++ gcc/gcc/reload1.c 26 Nov 2004 05:08:45 -0000 1.366.2.12
- @@ -3389,6 +3389,16 @@
- num_not_at_initial_offset = 0;
- }
-
- +/* Subroutine of set_initial_label_offsets called via for_each_eh_label. */
- +
- +static void set_initial_eh_label_offset PARAMS ((rtx));
- +static void
- +set_initial_eh_label_offset (label)
- + rtx label;
- +{
- + set_label_offsets (label, NULL_RTX, 1);
- +}
- +
- /* Initialize the known label offsets.
- Set a known offset for each forced label to be at the initial offset
- of each elimination. We do this because we assume that all
- @@ -3405,6 +3415,8 @@
- for (x = forced_labels; x; x = XEXP (x, 1))
- if (XEXP (x, 0))
- set_label_offsets (XEXP (x, 0), NULL_RTX, 1);
- +
- + for_each_eh_label (set_initial_eh_label_offset);
- }
-
- /* Set all elimination offsets to the known values for the code label given
- Index: gcc/rtl.h
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/rtl.h,v
- retrieving revision 1.375.2.8
- retrieving revision 1.375.2.9
- diff -u -r1.375.2.8 -r1.375.2.9
- --- gcc/gcc/rtl.h 24 Apr 2004 19:40:45 -0000 1.375.2.8
- +++ gcc/gcc/rtl.h 4 Dec 2004 00:36:38 -0000 1.375.2.9
- @@ -2120,6 +2120,8 @@
- extern void reg_scan PARAMS ((rtx, unsigned int, int));
- extern void reg_scan_update PARAMS ((rtx, rtx, unsigned int));
- extern void fix_register PARAMS ((const char *, int, int));
- +extern void init_subregs_of_mode PARAMS ((void));
- +extern void record_subregs_of_mode PARAMS ((rtx));
- #ifdef HARD_CONST
- extern void cannot_change_mode_set_regs PARAMS ((HARD_REG_SET *,
- enum machine_mode,
- Index: gcc/tree-inline.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/tree-inline.c,v
- retrieving revision 1.38.2.12
- retrieving revision 1.38.2.13
- diff -u -r1.38.2.12 -r1.38.2.13
- --- gcc/gcc/tree-inline.c 12 Mar 2004 22:43:29 -0000 1.38.2.12
- +++ gcc/gcc/tree-inline.c 21 Jan 2005 10:02:12 -0000 1.38.2.13
- @@ -1173,7 +1173,8 @@
- if (!inlinable_function_p (fn, id))
- {
- if (warn_inline && DECL_INLINE (fn) && !DID_INLINE_FUNC (fn)
- - && !DECL_IN_SYSTEM_HEADER (fn))
- + && !DECL_IN_SYSTEM_HEADER (fn)
- + && !lookup_attribute ("noinline", DECL_ATTRIBUTES (fn)))
- {
- warning_with_decl (fn, "inlining failed in call to `%s'");
- warning ("called from here");
- Index: gcc/unroll.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/Attic/unroll.c,v
- retrieving revision 1.184.2.9
- retrieving revision 1.184.2.10
- diff -u -r1.184.2.9 -r1.184.2.10
- --- gcc/gcc/unroll.c 17 May 2004 21:05:48 -0000 1.184.2.9
- +++ gcc/gcc/unroll.c 27 Nov 2004 16:59:15 -0000 1.184.2.10
- @@ -794,6 +794,10 @@
- for (r = FIRST_PSEUDO_REGISTER; r < max_reg_before_loop; ++r)
- if (REGNO_FIRST_UID (r) > 0 && REGNO_FIRST_UID (r) < max_uid_for_loop
- && REGNO_FIRST_LUID (r) >= copy_start_luid
- + /* See the comment in reg_scan_mark_refs on the relationship between
- + last_uid and last_note_uid. */
- + && REGNO_LAST_UID (r) > 0 && REGNO_LAST_UID (r) < max_uid_for_loop
- + && REGNO_LAST_LUID (r) <= copy_end_luid
- && REGNO_LAST_NOTE_UID (r) > 0 && REGNO_LAST_NOTE_UID (r) < max_uid_for_loop
- && REGNO_LAST_NOTE_LUID (r) <= copy_end_luid)
- {
- Index: gcc/unwind-dw2.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/unwind-dw2.c,v
- retrieving revision 1.22.2.9
- retrieving revision 1.22.2.11
- diff -u -r1.22.2.9 -r1.22.2.11
- --- gcc/gcc/unwind-dw2.c 8 May 2004 21:52:42 -0000 1.22.2.9
- +++ gcc/gcc/unwind-dw2.c 29 Jan 2005 11:54:24 -0000 1.22.2.11
- @@ -1,5 +1,5 @@
- /* DWARF2 exception handling and frame unwind runtime interface routines.
- - Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
- + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
-
- This file is part of GCC.
- @@ -165,6 +165,11 @@
- inline _Unwind_Word
- _Unwind_GetGR (struct _Unwind_Context *context, int index)
- {
- +#ifdef DWARF_ZERO_REG
- + if (index == DWARF_ZERO_REG)
- + return 0;
- +#endif
- +
- /* This will segfault if the register hasn't been saved. */
- return * (_Unwind_Word *) context->reg[index];
- }
- @@ -604,6 +609,10 @@
- case DW_OP_mul:
- case DW_OP_or:
- case DW_OP_plus:
- + case DW_OP_shl:
- + case DW_OP_shr:
- + case DW_OP_shra:
- + case DW_OP_xor:
- case DW_OP_le:
- case DW_OP_ge:
- case DW_OP_eq:
- Index: gcc/config/freebsd-spec.h
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/freebsd-spec.h,v
- retrieving revision 1.2.4.1
- retrieving revision 1.2.4.2
- diff -u -r1.2.4.1 -r1.2.4.2
- --- gcc/gcc/config/freebsd-spec.h 12 Mar 2003 02:38:01 -0000 1.2.4.1
- +++ gcc/gcc/config/freebsd-spec.h 14 Jan 2005 02:06:26 -0000 1.2.4.2
- @@ -130,13 +130,7 @@
- %{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
- +#if FBSD_MAJOR < 5
- #define FBSD_LIB_SPEC " \
- %{!shared: \
- %{!pg: \
- @@ -146,5 +140,11 @@
- %{!pthread:-lc_p} \
- %{pthread:-lc_r_p}} \
- }"
- +#else
- +#define FBSD_LIB_SPEC " \
- + %{!shared: \
- + %{!pg: %{pthread:-lpthread} -lc} \
- + %{pg: %{pthread:-lpthread_p} -lc_p} \
- + }"
- #endif
- #endif
- Index: gcc/config/alpha/alpha.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/alpha/alpha.c,v
- retrieving revision 1.282.4.11
- retrieving revision 1.282.4.12
- diff -u -r1.282.4.11 -r1.282.4.12
- --- gcc/gcc/config/alpha/alpha.c 8 Mar 2004 03:21:46 -0000 1.282.4.11
- +++ gcc/gcc/config/alpha/alpha.c 30 Sep 2004 19:36:26 -0000 1.282.4.12
- @@ -6766,11 +6766,6 @@
- break;
- imask |= 1L << regno;
- }
- -
- - /* Glibc likes to use $31 as an unwind stopper for crt0. To
- - avoid hackery in unwind-dw2.c, we need to actively store a
- - zero in the prologue of _Unwind_RaiseException et al. */
- - imask |= 1UL << 31;
- }
-
- /* If any register spilled, then spill the return address also. */
- @@ -7236,24 +7231,6 @@
- reg_offset += 8;
- }
-
- - /* Store a zero if requested for unwinding. */
- - if (imask & (1UL << 31))
- - {
- - rtx insn, t;
- -
- - mem = gen_rtx_MEM (DImode, plus_constant (sa_reg, reg_offset));
- - set_mem_alias_set (mem, alpha_sr_alias_set);
- - insn = emit_move_insn (mem, const0_rtx);
- -
- - RTX_FRAME_RELATED_P (insn) = 1;
- - t = gen_rtx_REG (Pmode, 31);
- - t = gen_rtx_SET (VOIDmode, mem, t);
- - t = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, t, REG_NOTES (insn));
- - REG_NOTES (insn) = t;
- -
- - reg_offset += 8;
- - }
- -
- for (i = 0; i < 31; i++)
- if (fmask & (1L << i))
- {
- @@ -7674,9 +7651,6 @@
- reg_offset += 8;
- }
-
- - if (imask & (1UL << 31))
- - reg_offset += 8;
- -
- for (i = 0; i < 31; ++i)
- if (fmask & (1L << i))
- {
- Index: gcc/config/alpha/alpha.h
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/alpha/alpha.h,v
- retrieving revision 1.185.4.6
- retrieving revision 1.185.4.7
- diff -u -r1.185.4.6 -r1.185.4.7
- --- gcc/gcc/config/alpha/alpha.h 27 Aug 2004 00:01:15 -0000 1.185.4.6
- +++ gcc/gcc/config/alpha/alpha.h 30 Sep 2004 19:36:28 -0000 1.185.4.7
- @@ -1299,6 +1299,7 @@
- #define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, 26)
- #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (26)
- #define DWARF_ALT_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (64)
- +#define DWARF_ZERO_REG 31
-
- /* Describe how we implement __builtin_eh_return. */
- #define EH_RETURN_DATA_REGNO(N) ((N) < 4 ? (N) + 16 : INVALID_REGNUM)
- Index: gcc/config/alpha/alpha.md
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/alpha/alpha.md,v
- retrieving revision 1.199.4.6
- retrieving revision 1.199.4.7
- diff -u -r1.199.4.6 -r1.199.4.7
- --- gcc/gcc/config/alpha/alpha.md 28 May 2004 00:02:03 -0000 1.199.4.6
- +++ gcc/gcc/config/alpha/alpha.md 5 Dec 2004 19:58:42 -0000 1.199.4.7
- @@ -80,6 +80,7 @@
- (UNSPECV_PLDGP2 11) ; prologue ldgp
- (UNSPECV_SET_TP 12)
- (UNSPECV_RPCC 13)
- + (UNSPECV_SETJMPR_ER 14) ; builtin_setjmp_receiver fragment
- ])
-
- ;; Where necessary, the suffixes _le and _be are used to distinguish between
- @@ -6764,70 +6765,44 @@
- "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)]
- - "
- -{
- - emit_note (NULL, NOTE_INSN_DELETED);
- - DONE;
- -}")
- -
- -(define_insn "*builtin_setjmp_receiver_1"
- +(define_expand "builtin_setjmp_receiver"
- [(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)
- +(define_insn_and_split "*builtin_setjmp_receiver_1"
- + [(unspec_volatile [(match_operand 0 "" "")] UNSPECV_SETJMPR)]
- + "TARGET_ABI_OSF"
- +{
- + if (TARGET_EXPLICIT_RELOCS)
- + return "#";
- + else
- + return "br $27,$LSJ%=\n$LSJ%=:\;ldgp $29,0($27)";
- +}
- + "&& TARGET_EXPLICIT_RELOCS && reload_completed"
- + [(unspec_volatile [(match_dup 0)] UNSPECV_SETJMPR_ER)
- (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++);
- -})
- +}
- + [(set_attr "length" "12")
- + (set_attr "type" "multi")])
-
- -(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_insn "*builtin_setjmp_receiver_er_sl_1"
- + [(unspec_volatile [(match_operand 0 "" "")] UNSPECV_SETJMPR_ER)]
- + "TARGET_ABI_OSF && TARGET_EXPLICIT_RELOCS && TARGET_AS_CAN_SUBTRACT_LABELS"
- + "lda $27,$LSJ%=-%l0($27)\n$LSJ%=:")
-
- -(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_insn "*builtin_setjmp_receiver_er_1"
- + [(unspec_volatile [(match_operand 0 "" "")] UNSPECV_SETJMPR_ER)]
- + "TARGET_ABI_OSF && TARGET_EXPLICIT_RELOCS"
- + "br $27,$LSJ%=\n$LSJ%=:"
- + [(set_attr "type" "ibr")])
-
- (define_expand "exception_receiver"
- [(unspec_volatile [(match_dup 0)] UNSPECV_EHR)]
- @@ -6835,28 +6810,38 @@
- {
- 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"
- + "TARGET_ABI_OSF && TARGET_LD_BUGGY_LDGP"
- "ldq $29,%0"
- [(set_attr "type" "ild")])
-
- +(define_insn_and_split "*exception_receiver_1"
- + [(unspec_volatile [(const_int 0)] UNSPECV_EHR)]
- + "TARGET_ABI_OSF"
- +{
- + if (TARGET_EXPLICIT_RELOCS)
- + return "ldah $29,0($26)\t\t!gpdisp!%*\;lda $29,0($29)\t\t!gpdisp!%*";
- + else
- + return "ldgp $29,0($26)";
- +}
- + "&& TARGET_EXPLICIT_RELOCS && reload_completed"
- + [(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++);
- +}
- + [(set_attr "length" "8")
- + (set_attr "type" "multi")])
- +
- (define_expand "nonlocal_goto_receiver"
- [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE)
- (set (reg:DI 27) (mem:DI (reg:DI 29)))
- Index: gcc/config/alpha/qrnnd.asm
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/alpha/qrnnd.asm,v
- retrieving revision 1.1
- retrieving revision 1.1.60.1
- diff -u -r1.1 -r1.1.60.1
- --- gcc/gcc/config/alpha/qrnnd.asm 15 Apr 2000 16:34:38 -0000 1.1
- +++ gcc/gcc/config/alpha/qrnnd.asm 30 Sep 2004 19:36:28 -0000 1.1.60.1
- @@ -26,6 +26,10 @@
- # Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- # MA 02111-1307, USA.
-
- +#ifdef __ELF__
- +.section .note.GNU-stack,""
- +#endif
- +
- .set noreorder
- .set noat
-
- Index: gcc/config/i386/i386-protos.h
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/i386/i386-protos.h,v
- retrieving revision 1.86.2.2
- retrieving revision 1.86.2.3
- diff -u -r1.86.2.2 -r1.86.2.3
- --- gcc/gcc/config/i386/i386-protos.h 8 Jul 2003 19:16:44 -0000 1.86.2.2
- +++ gcc/gcc/config/i386/i386-protos.h 12 Dec 2004 21:00:44 -0000 1.86.2.3
- @@ -88,6 +88,8 @@
- extern int cmpsi_operand PARAMS ((rtx, enum machine_mode));
- extern int long_memory_operand PARAMS ((rtx, enum machine_mode));
- extern int aligned_operand PARAMS ((rtx, enum machine_mode));
- +extern int compare_operator PARAMS ((rtx, enum machine_mode));
- +extern int flags_reg_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));
- Index: gcc/config/i386/i386.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/i386/i386.c,v
- retrieving revision 1.495.2.36
- retrieving revision 1.495.2.37
- diff -u -r1.495.2.36 -r1.495.2.37
- --- gcc/gcc/config/i386/i386.c 18 May 2004 05:07:52 -0000 1.495.2.36
- +++ gcc/gcc/config/i386/i386.c 12 Dec 2004 21:00:44 -0000 1.495.2.37
- @@ -3609,6 +3609,20 @@
- return ANY_QI_REG_P (op);
- }
-
- +/* Return true if op is an flags register. */
- +
- +int
- +flags_reg_operand (op, mode)
- + register rtx op;
- + enum machine_mode mode;
- +{
- + if (mode != VOIDmode && GET_MODE (op) != mode)
- + return 0;
- + return (GET_CODE (op) == REG
- + && REGNO (op) == FLAGS_REG
- + && GET_MODE (op) != VOIDmode);
- +}
- +
- /* Return true if op is a NON_Q_REGS class register. */
-
- int
- @@ -3969,6 +3983,14 @@
- /* Didn't find one -- this must be an aligned address. */
- return 1;
- }
- +
- +int
- +compare_operator (op, mode)
- + rtx op;
- + enum machine_mode mode ATTRIBUTE_UNUSED;
- +{
- + return GET_CODE (op) == COMPARE;
- +}
-
- /* Return true if the constant is something that can be loaded with
- a special instruction. Only handle 0.0 and 1.0; others are less
- Index: gcc/config/i386/i386.h
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/i386/i386.h,v
- retrieving revision 1.309.2.11
- retrieving revision 1.309.2.12
- diff -u -r1.309.2.11 -r1.309.2.12
- --- gcc/gcc/config/i386/i386.h 6 Feb 2004 19:43:31 -0000 1.309.2.11
- +++ gcc/gcc/config/i386/i386.h 12 Dec 2004 21:00:47 -0000 1.309.2.12
- @@ -3319,6 +3319,7 @@
- SYMBOL_REF, LABEL_REF, SUBREG, REG, MEM}}, \
- {"nonmemory_no_elim_operand", {CONST_INT, REG, SUBREG}}, \
- {"index_register_operand", {SUBREG, REG}}, \
- + {"flags_reg_operand", {REG}}, \
- {"q_regs_operand", {SUBREG, REG}}, \
- {"non_q_regs_operand", {SUBREG, REG}}, \
- {"fcmov_comparison_operator", {EQ, NE, LTU, GTU, LEU, GEU, UNORDERED, \
- @@ -3354,6 +3355,7 @@
- {"fp_register_operand", {REG}}, \
- {"register_and_not_fp_reg_operand", {REG}}, \
- {"vector_move_operand", {CONST_VECTOR, SUBREG, REG, MEM}}, \
- + {"compare_operator", {COMPARE}},
-
- /* A list of predicates that do special things with modes, and so
- should not elicit warnings for VOIDmode match_operand. */
- Index: gcc/config/i386/i386.md
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/i386/i386.md,v
- retrieving revision 1.404.2.24
- retrieving revision 1.404.2.29
- diff -u -r1.404.2.24 -r1.404.2.29
- --- gcc/gcc/config/i386/i386.md 28 Apr 2004 17:00:03 -0000 1.404.2.24
- +++ gcc/gcc/config/i386/i386.md 23 Jan 2005 05:15:59 -0000 1.404.2.29
- @@ -1188,10 +1188,9 @@
- ""
- "xchg{l}\t%1, %0"
- [(set_attr "type" "imov")
- + (set_attr "mode" "SI")
- (set_attr "pent_pair" "np")
- (set_attr "athlon_decode" "vector")
- - (set_attr "mode" "SI")
- - (set_attr "modrm" "0")
- (set_attr "ppro_uops" "few")])
-
- (define_expand "movhi"
- @@ -1304,12 +1303,12 @@
- (match_operand:HI 1 "register_operand" "+r"))
- (set (match_dup 1)
- (match_dup 0))]
- - "TARGET_PARTIAL_REG_STALL"
- - "xchg{w}\t%1, %0"
- + "!TARGET_PARTIAL_REG_STALL || optimize_size"
- + "xchg{l}\t%k1, %k0"
- [(set_attr "type" "imov")
- + (set_attr "mode" "SI")
- (set_attr "pent_pair" "np")
- - (set_attr "mode" "HI")
- - (set_attr "modrm" "0")
- + (set_attr "athlon_decode" "vector")
- (set_attr "ppro_uops" "few")])
-
- (define_insn "*swaphi_2"
- @@ -1317,12 +1316,12 @@
- (match_operand:HI 1 "register_operand" "+r"))
- (set (match_dup 1)
- (match_dup 0))]
- - "! TARGET_PARTIAL_REG_STALL"
- - "xchg{l}\t%k1, %k0"
- + "TARGET_PARTIAL_REG_STALL"
- + "xchg{w}\t%1, %0"
- [(set_attr "type" "imov")
- + (set_attr "mode" "HI")
- (set_attr "pent_pair" "np")
- - (set_attr "mode" "SI")
- - (set_attr "modrm" "0")
- + (set_attr "athlon_decode" "vector")
- (set_attr "ppro_uops" "few")])
-
- (define_expand "movstricthi"
- @@ -1470,17 +1469,30 @@
- DONE;
- })
-
- -(define_insn "*swapqi"
- +(define_insn "*swapqi_1"
- [(set (match_operand:QI 0 "register_operand" "+r")
- (match_operand:QI 1 "register_operand" "+r"))
- (set (match_dup 1)
- (match_dup 0))]
- - ""
- - "xchg{b}\t%1, %0"
- + "!TARGET_PARTIAL_REG_STALL || optimize_size"
- + "xchg{l}\t%k1, %k0"
- [(set_attr "type" "imov")
- + (set_attr "mode" "SI")
- (set_attr "pent_pair" "np")
- + (set_attr "athlon_decode" "vector")
- + (set_attr "ppro_uops" "few")])
- +
- +(define_insn "*swapqi_2"
- + [(set (match_operand:QI 0 "register_operand" "+q")
- + (match_operand:QI 1 "register_operand" "+q"))
- + (set (match_dup 1)
- + (match_dup 0))]
- + "TARGET_PARTIAL_REG_STALL"
- + "xchg{b}\t%1, %0"
- + [(set_attr "type" "imov")
- (set_attr "mode" "QI")
- - (set_attr "modrm" "0")
- + (set_attr "pent_pair" "np")
- + (set_attr "athlon_decode" "vector")
- (set_attr "ppro_uops" "few")])
-
- (define_expand "movstrictqi"
- @@ -1987,13 +1999,11 @@
- "TARGET_64BIT"
- "xchg{q}\t%1, %0"
- [(set_attr "type" "imov")
- + (set_attr "mode" "DI")
- (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" "")
- (match_operand:SF 1 "general_operand" ""))]
- @@ -7559,17 +7569,21 @@
- ""
- "")
-
- -(define_insn "*testqi_1"
- +(define_insn "*testqi_1_maybe_si"
- [(set (reg 17)
- - (compare (and:QI (match_operand:QI 0 "nonimmediate_operand" "%*a,q,qm,r")
- - (match_operand:QI 1 "nonmemory_operand" "n,n,qn,n"))
- - (const_int 0)))]
- - "ix86_match_ccmode (insn, CCNOmode)"
- + (compare
- + (and:QI
- + (match_operand:QI 0 "nonimmediate_operand" "%*a,q,qm,r")
- + (match_operand:QI 1 "nonmemory_operand" "n,n,qn,n"))
- + (const_int 0)))]
- + "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)
- + && ix86_match_ccmode (insn,
- + GET_CODE (operands[1]) == CONST_INT
- + && INTVAL (operands[1]) >= 0 ? CCNOmode : CCZmode)"
- {
- if (which_alternative == 3)
- {
- - if (GET_CODE (operands[1]) == CONST_INT
- - && (INTVAL (operands[1]) & 0xffffff00))
- + if (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) < 0)
- operands[1] = GEN_INT (INTVAL (operands[1]) & 0xff);
- return "test{l}\t{%1, %k0|%k0, %1}";
- }
- @@ -7580,6 +7594,18 @@
- (set_attr "mode" "QI,QI,QI,SI")
- (set_attr "pent_pair" "uv,np,uv,np")])
-
- +(define_insn "*testqi_1"
- + [(set (reg 17)
- + (compare (and:QI (match_operand:QI 0 "nonimmediate_operand" "%*a,q,qm")
- + (match_operand:QI 1 "nonmemory_operand" "n,n,qn"))
- + (const_int 0)))]
- + "ix86_match_ccmode (insn, CCNOmode)"
- + "test{b}\t{%1, %0|%0, %1}"
- + [(set_attr "type" "test")
- + (set_attr "modrm" "0,1,1")
- + (set_attr "mode" "QI")
- + (set_attr "pent_pair" "uv,np,uv")])
- +
- (define_expand "testqi_ext_ccno_0"
- [(set (reg:CCNO 17)
- (compare:CCNO
- @@ -7697,51 +7723,53 @@
- "#")
-
- (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)))]
- + [(set (match_operand 0 "flags_reg_operand" "")
- + (match_operator 1 "compare_operator"
- + [(zero_extract
- + (match_operand 2 "nonimmediate_operand" "")
- + (match_operand 3 "const_int_operand" "")
- + (match_operand 4 "const_int_operand" ""))
- + (const_int 0)]))]
- "ix86_match_ccmode (insn, CCNOmode)"
- - [(set (reg:CCNO 17) (compare:CCNO (match_dup 3) (const_int 0)))]
- + [(set (match_dup 0) (match_op_dup 1 [(match_dup 2) (const_int 0)]))]
- {
- - HOST_WIDE_INT len = INTVAL (operands[1]);
- - HOST_WIDE_INT pos = INTVAL (operands[2]);
- + rtx val = operands[2];
- + HOST_WIDE_INT len = INTVAL (operands[3]);
- + HOST_WIDE_INT pos = INTVAL (operands[4]);
- HOST_WIDE_INT mask;
- enum machine_mode mode, submode;
-
- - mode = GET_MODE (operands[0]);
- - if (GET_CODE (operands[0]) == MEM)
- + mode = GET_MODE (val);
- + if (GET_CODE (val) == MEM)
- {
- /* ??? Combine likes to put non-volatile mem extractions in QImode
- no matter the size of the test. So find a mode that works. */
- - if (! MEM_VOLATILE_P (operands[0]))
- + if (! MEM_VOLATILE_P (val))
- {
- mode = smallest_mode_for_size (pos + len, MODE_INT);
- - operands[0] = adjust_address (operands[0], mode, 0);
- + val = adjust_address (val, mode, 0);
- }
- }
- - else if (GET_CODE (operands[0]) == SUBREG
- - && (submode = GET_MODE (SUBREG_REG (operands[0])),
- + else if (GET_CODE (val) == SUBREG
- + && (submode = GET_MODE (SUBREG_REG (val)),
- 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]);
- + val = SUBREG_REG (val);
- }
- else if (mode == HImode && pos + len <= 8)
- {
- /* Small HImode tests can be converted to QImode. */
- mode = QImode;
- - operands[0] = gen_lowpart (QImode, operands[0]);
- + val = gen_lowpart (QImode, val);
- }
-
- 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_mode (mask, mode));
- + operands[2] = gen_rtx_AND (mode, val, gen_int_mode (mask, mode));
- })
-
- ;; Convert HImode/SImode test instructions with immediate to QImode ones.
- @@ -7750,46 +7778,44 @@
- ;; Do the converison only post-reload to avoid limiting of the register class
- ;; to QI regs.
- (define_split
- - [(set (reg 17)
- - (compare
- - (and (match_operand 0 "register_operand" "")
- - (match_operand 1 "const_int_operand" ""))
- - (const_int 0)))]
- + [(set (match_operand 0 "flags_reg_operand" "")
- + (match_operator 1 "compare_operator"
- + [(and (match_operand 2 "register_operand" "")
- + (match_operand 3 "const_int_operand" ""))
- + (const_int 0)]))]
- "reload_completed
- - && QI_REG_P (operands[0])
- + && QI_REG_P (operands[2])
- + && GET_MODE (operands[2]) != QImode
- && ((ix86_match_ccmode (insn, CCZmode)
- - && !(INTVAL (operands[1]) & ~(255 << 8)))
- + && !(INTVAL (operands[3]) & ~(255 << 8)))
- || (ix86_match_ccmode (insn, CCNOmode)
- - && !(INTVAL (operands[1]) & ~(127 << 8))))
- - && GET_MODE (operands[0]) != QImode"
- - [(set (reg:CCNO 17)
- - (compare:CCNO
- - (and:SI (zero_extract:SI (match_dup 0) (const_int 8) (const_int 8))
- - (match_dup 1))
- - (const_int 0)))]
- - "operands[0] = gen_lowpart (SImode, operands[0]);
- - operands[1] = gen_int_mode (INTVAL (operands[1]) >> 8, SImode);")
- + && !(INTVAL (operands[3]) & ~(127 << 8))))"
- + [(set (match_dup 0)
- + (match_op_dup 1
- + [(and:SI (zero_extract:SI (match_dup 2) (const_int 8) (const_int 8))
- + (match_dup 3))
- + (const_int 0)]))]
- + "operands[2] = gen_lowpart (SImode, operands[2]);
- + operands[3] = gen_int_mode (INTVAL (operands[3]) >> 8, SImode);")
-
- (define_split
- - [(set (reg 17)
- - (compare
- - (and (match_operand 0 "nonimmediate_operand" "")
- - (match_operand 1 "const_int_operand" ""))
- - (const_int 0)))]
- + [(set (match_operand 0 "flags_reg_operand" "")
- + (match_operator 1 "compare_operator"
- + [(and (match_operand 2 "nonimmediate_operand" "")
- + (match_operand 3 "const_int_operand" ""))
- + (const_int 0)]))]
- "reload_completed
- - && (!REG_P (operands[0]) || ANY_QI_REG_P (operands[0]))
- + && GET_MODE (operands[2]) != QImode
- + && (!REG_P (operands[2]) || ANY_QI_REG_P (operands[2]))
- && ((ix86_match_ccmode (insn, CCZmode)
- - && !(INTVAL (operands[1]) & ~255))
- + && !(INTVAL (operands[3]) & ~255))
- || (ix86_match_ccmode (insn, CCNOmode)
- - && !(INTVAL (operands[1]) & ~127)))
- - && GET_MODE (operands[0]) != QImode"
- - [(set (reg:CCNO 17)
- - (compare:CCNO
- - (and:QI (match_dup 0)
- - (match_dup 1))
- - (const_int 0)))]
- - "operands[0] = gen_lowpart (QImode, operands[0]);
- - operands[1] = gen_lowpart (QImode, operands[1]);")
- + && !(INTVAL (operands[3]) & ~127)))"
- + [(set (match_dup 0)
- + (match_op_dup 1 [(and:QI (match_dup 2) (match_dup 3))
- + (const_int 0)]))]
- + "operands[2] = gen_lowpart (QImode, operands[2]);
- + operands[3] = gen_lowpart (QImode, operands[3]);")
-
-
- ;; %%% This used to optimize known byte-wide and operations to memory,
- @@ -8066,7 +8092,7 @@
- [(set_attr "type" "alu1")
- (set_attr "mode" "QI")])
-
- -(define_insn "*andqi_2"
- +(define_insn "*andqi_2_maybe_si"
- [(set (reg 17)
- (compare (and:QI
- (match_operand:QI 1 "nonimmediate_operand" "%0,0,0")
- @@ -8074,13 +8100,14 @@
- (const_int 0)))
- (set (match_operand:QI 0 "nonimmediate_operand" "=q,qm,*r")
- (and:QI (match_dup 1) (match_dup 2)))]
- - "ix86_match_ccmode (insn, CCNOmode)
- - && ix86_binary_operator_ok (AND, QImode, operands)"
- + "ix86_binary_operator_ok (AND, QImode, operands)
- + && ix86_match_ccmode (insn,
- + GET_CODE (operands[2]) == CONST_INT
- + && INTVAL (operands[2]) >= 0 ? CCNOmode : CCZmode)"
- {
- if (which_alternative == 2)
- {
- - if (GET_CODE (operands[2]) == CONST_INT
- - && (INTVAL (operands[2]) & 0xffffff00))
- + if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)
- operands[2] = GEN_INT (INTVAL (operands[2]) & 0xff);
- return "and{l}\t{%2, %k0|%k0, %2}";
- }
- @@ -8089,6 +8116,20 @@
- [(set_attr "type" "alu")
- (set_attr "mode" "QI,QI,SI")])
-
- +(define_insn "*andqi_2"
- + [(set (reg 17)
- + (compare (and:QI
- + (match_operand:QI 1 "nonimmediate_operand" "%0,0")
- + (match_operand:QI 2 "general_operand" "qim,qi"))
- + (const_int 0)))
- + (set (match_operand:QI 0 "nonimmediate_operand" "=q,qm")
- + (and:QI (match_dup 1) (match_dup 2)))]
- + "ix86_match_ccmode (insn, CCNOmode)
- + && ix86_binary_operator_ok (AND, QImode, operands)"
- + "and{b}\t{%2, %0|%0, %2}"
- + [(set_attr "type" "alu")
- + (set_attr "mode" "QI")])
- +
- (define_insn "*andqi_2_slp"
- [(set (reg 17)
- (compare (and:QI
- @@ -10147,17 +10188,19 @@
- (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)))]
- + [(set (match_operand 0 "flags_reg_operand" "")
- + (match_operator 2 "compare_operator"
- + [(not:DI (match_operand:DI 3 "nonimmediate_operand" ""))
- + (const_int 0)]))
- + (set (match_operand:DI 1 "nonimmediate_operand" "")
- + (not:DI (match_dup 3)))]
- "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)))])]
- + [(parallel [(set (match_dup 0)
- + (match_op_dup 2
- + [(xor:DI (match_dup 3) (const_int -1))
- + (const_int 0)]))
- + (set (match_dup 1)
- + (xor:DI (match_dup 3) (const_int -1)))])]
- "")
-
- (define_expand "one_cmplsi2"
- @@ -10196,17 +10239,18 @@
- (set_attr "mode" "SI")])
-
- (define_split
- - [(set (reg 17)
- - (compare (not:SI (match_operand:SI 1 "nonimmediate_operand" ""))
- - (const_int 0)))
- - (set (match_operand:SI 0 "nonimmediate_operand" "")
- - (not:SI (match_dup 1)))]
- + [(set (match_operand 0 "flags_reg_operand" "")
- + (match_operator 2 "compare_operator"
- + [(not:SI (match_operand:SI 3 "nonimmediate_operand" ""))
- + (const_int 0)]))
- + (set (match_operand:SI 1 "nonimmediate_operand" "")
- + (not:SI (match_dup 3)))]
- "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)
- - (xor:SI (match_dup 1) (const_int -1)))])]
- + [(parallel [(set (match_dup 0)
- + (match_op_dup 2 [(xor:SI (match_dup 3) (const_int -1))
- + (const_int 0)]))
- + (set (match_dup 1)
- + (xor:SI (match_dup 3) (const_int -1)))])]
- "")
-
- ;; ??? Currently never generated - xor is used instead.
- @@ -10223,17 +10267,18 @@
- (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))))]
- + [(set (match_operand 0 "flags_reg_operand" "")
- + (match_operator 2 "compare_operator"
- + [(not:SI (match_operand:SI 3 "register_operand" ""))
- + (const_int 0)]))
- + (set (match_operand:DI 1 "register_operand" "")
- + (zero_extend:DI (not:SI (match_dup 3))))]
- "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))))])]
- + [(parallel [(set (match_dup 0)
- + (match_op_dup 2 [(xor:SI (match_dup 3) (const_int -1))
- + (const_int 0)]))
- + (set (match_dup 1)
- + (zero_extend:DI (xor:SI (match_dup 3) (const_int -1))))])]
- "")
-
- (define_expand "one_cmplhi2"
- @@ -10263,17 +10308,18 @@
- (set_attr "mode" "HI")])
-
- (define_split
- - [(set (reg 17)
- - (compare (not:HI (match_operand:HI 1 "nonimmediate_operand" ""))
- - (const_int 0)))
- - (set (match_operand:HI 0 "nonimmediate_operand" "")
- - (not:HI (match_dup 1)))]
- + [(set (match_operand 0 "flags_reg_operand" "")
- + (match_operator 2 "compare_operator"
- + [(not:HI (match_operand:HI 3 "nonimmediate_operand" ""))
- + (const_int 0)]))
- + (set (match_operand:HI 1 "nonimmediate_operand" "")
- + (not:HI (match_dup 3)))]
- "ix86_match_ccmode (insn, CCNOmode)"
- - [(parallel [(set (reg:CCNO 17)
- - (compare:CCNO (xor:HI (match_dup 1) (const_int -1))
- - (const_int 0)))
- - (set (match_dup 0)
- - (xor:HI (match_dup 1) (const_int -1)))])]
- + [(parallel [(set (match_dup 0)
- + (match_op_dup 2 [(xor:HI (match_dup 3) (const_int -1))
- + (const_int 0)]))
- + (set (match_dup 1)
- + (xor:HI (match_dup 3) (const_int -1)))])]
- "")
-
- ;; %%% Potential partial reg stall on alternative 1. What to do?
- @@ -10306,17 +10352,18 @@
- (set_attr "mode" "QI")])
-
- (define_split
- - [(set (reg 17)
- - (compare (not:QI (match_operand:QI 1 "nonimmediate_operand" ""))
- - (const_int 0)))
- - (set (match_operand:QI 0 "nonimmediate_operand" "")
- - (not:QI (match_dup 1)))]
- + [(set (match_operand 0 "flags_reg_operand" "")
- + (match_operator 2 "compare_operator"
- + [(not:QI (match_operand:QI 3 "nonimmediate_operand" ""))
- + (const_int 0)]))
- + (set (match_operand:QI 1 "nonimmediate_operand" "")
- + (not:QI (match_dup 3)))]
- "ix86_match_ccmode (insn, CCNOmode)"
- - [(parallel [(set (reg:CCNO 17)
- - (compare:CCNO (xor:QI (match_dup 1) (const_int -1))
- - (const_int 0)))
- - (set (match_dup 0)
- - (xor:QI (match_dup 1) (const_int -1)))])]
- + [(parallel [(set (match_dup 0)
- + (match_op_dup 2 [(xor:QI (match_dup 3) (const_int -1))
- + (const_int 0)]))
- + (set (match_dup 1)
- + (xor:QI (match_dup 3) (const_int -1)))])]
- "")
-
- ;; Arithmetic shift instructions
- @@ -16639,10 +16686,12 @@
- (set (subreg:TI (match_dup 0) 0) (ior:TI (subreg:TI (match_dup 6) 0)
- (subreg:TI (match_dup 7) 0)))]
- {
- - /* If op2 == op3, op3 will be clobbered before it is used.
- - This should be optimized out though. */
- + /* If op2 == op3, op3 would be clobbered before it is used. */
- if (operands_match_p (operands[2], operands[3]))
- - abort ();
- + {
- + emit_move_insn (operands[0], operands[2]);
- + DONE;
- + }
- PUT_MODE (operands[1], GET_MODE (operands[0]));
- if (operands_match_p (operands[0], operands[4]))
- operands[6] = operands[4], operands[7] = operands[2];
- @@ -16863,52 +16912,56 @@
- ; instruction size is unchanged, except in the %eax case for
- ; which it is increased by one byte, hence the ! optimize_size.
- (define_split
- - [(set (reg 17)
- - (compare (and (match_operand 1 "aligned_operand" "")
- - (match_operand 2 "const_int_operand" ""))
- - (const_int 0)))
- - (set (match_operand 0 "register_operand" "")
- - (and (match_dup 1) (match_dup 2)))]
- + [(set (match_operand 0 "flags_reg_operand" "")
- + (match_operator 2 "compare_operator"
- + [(and (match_operand 3 "aligned_operand" "")
- + (match_operand 4 "const_int_operand" ""))
- + (const_int 0)]))
- + (set (match_operand 1 "register_operand" "")
- + (and (match_dup 3) (match_dup 4)))]
- "! TARGET_PARTIAL_REG_STALL && reload_completed
- /* Ensure that the operand will remain sign-extended immediate. */
- - && ix86_match_ccmode (insn, INTVAL (operands[2]) >= 0 ? CCNOmode : CCZmode)
- + && ix86_match_ccmode (insn, INTVAL (operands[4]) >= 0 ? CCNOmode : CCZmode)
- && ! optimize_size
- - && ((GET_MODE (operands[0]) == HImode && ! TARGET_FAST_PREFIX)
- - || (GET_MODE (operands[0]) == QImode && TARGET_PROMOTE_QImode))"
- - [(parallel [(set (reg:CCNO 17)
- - (compare:CCNO (and:SI (match_dup 1) (match_dup 2))
- - (const_int 0)))
- - (set (match_dup 0)
- - (and:SI (match_dup 1) (match_dup 2)))])]
- - "operands[2]
- - = gen_int_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]);")
- + && ((GET_MODE (operands[1]) == HImode && ! TARGET_FAST_PREFIX)
- + || (GET_MODE (operands[1]) == QImode && TARGET_PROMOTE_QImode))"
- + [(parallel [(set (match_dup 0)
- + (match_op_dup 2 [(and:SI (match_dup 3) (match_dup 4))
- + (const_int 0)]))
- + (set (match_dup 1)
- + (and:SI (match_dup 3) (match_dup 4)))])]
- +{
- + operands[4]
- + = gen_int_mode (INTVAL (operands[4])
- + & GET_MODE_MASK (GET_MODE (operands[1])), SImode);
- + operands[1] = gen_lowpart (SImode, operands[1]);
- + operands[3] = gen_lowpart (SImode, operands[3]);
- +})
-
- ; Don't promote the QImode tests, as i386 doesn't have encoding of
- ; the TEST instruction with 32-bit sign-extended immediate and thus
- ; the instruction size would at least double, which is not what we
- ; want even with ! optimize_size.
- (define_split
- - [(set (reg 17)
- - (compare (and (match_operand:HI 0 "aligned_operand" "")
- - (match_operand:HI 1 "const_int_operand" ""))
- - (const_int 0)))]
- + [(set (match_operand 0 "flags_reg_operand" "")
- + (match_operator 1 "compare_operator"
- + [(and (match_operand:HI 2 "aligned_operand" "")
- + (match_operand:HI 3 "const_int_operand" ""))
- + (const_int 0)]))]
- "! TARGET_PARTIAL_REG_STALL && reload_completed
- /* Ensure that the operand will remain sign-extended immediate. */
- - && ix86_match_ccmode (insn, INTVAL (operands[1]) >= 0 ? CCNOmode : CCZmode)
- + && ix86_match_ccmode (insn, INTVAL (operands[3]) >= 0 ? CCNOmode : CCZmode)
- && ! TARGET_FAST_PREFIX
- && ! optimize_size"
- - [(set (reg:CCNO 17)
- - (compare:CCNO (and:SI (match_dup 0) (match_dup 1))
- - (const_int 0)))]
- - "operands[1]
- - = gen_int_mode (INTVAL (operands[1])
- - & GET_MODE_MASK (GET_MODE (operands[0])),
- - SImode);
- - operands[0] = gen_lowpart (SImode, operands[0]);")
- + [(set (match_dup 0)
- + (match_op_dup 1 [(and:SI (match_dup 2) (match_dup 3))
- + (const_int 0)]))]
- +{
- + operands[3]
- + = gen_int_mode (INTVAL (operands[3])
- + & GET_MODE_MASK (GET_MODE (operands[2])), SImode);
- + operands[2] = gen_lowpart (SImode, operands[2]);
- +})
-
- (define_split
- [(set (match_operand 0 "register_operand" "")
- @@ -17081,13 +17134,14 @@
-
- ;; Don't compare memory with zero, load and use a test instead.
- (define_peephole2
- - [(set (reg 17)
- - (compare (match_operand:SI 0 "memory_operand" "")
- - (const_int 0)))
- + [(set (match_operand 0 "flags_reg_operand" "")
- + (match_operator 1 "compare_operator"
- + [(match_operand:SI 2 "memory_operand" "")
- + (const_int 0)]))
- (match_scratch:SI 3 "r")]
- "ix86_match_ccmode (insn, CCNOmode) && ! optimize_size"
- - [(set (match_dup 3) (match_dup 0))
- - (set (reg:CCNO 17) (compare:CCNO (match_dup 3) (const_int 0)))]
- + [(set (match_dup 3) (match_dup 2))
- + (set (match_dup 0) (match_op_dup 1 [(match_dup 3) (const_int 0)]))]
- "")
-
- ;; NOT is not pairable on Pentium, while XOR is, but one byte longer.
- @@ -17151,77 +17205,77 @@
- ;; versions if we're concerned about partial register stalls.
-
- (define_peephole2
- - [(set (reg 17)
- - (compare (and:SI (match_operand:SI 0 "register_operand" "")
- - (match_operand:SI 1 "immediate_operand" ""))
- - (const_int 0)))]
- + [(set (match_operand 0 "flags_reg_operand" "")
- + (match_operator 1 "compare_operator"
- + [(and:SI (match_operand:SI 2 "register_operand" "")
- + (match_operand:SI 3 "immediate_operand" ""))
- + (const_int 0)]))]
- "ix86_match_ccmode (insn, CCNOmode)
- - && (true_regnum (operands[0]) != 0
- - || (GET_CODE (operands[1]) == CONST_INT
- - && CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'K')))
- - && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))"
- + && (true_regnum (operands[2]) != 0
- + || (GET_CODE (operands[3]) == CONST_INT
- + && CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'K')))
- + && peep2_reg_dead_p (1, operands[2])"
- [(parallel
- - [(set (reg:CCNO 17)
- - (compare:CCNO (and:SI (match_dup 0)
- - (match_dup 1))
- - (const_int 0)))
- - (set (match_dup 0)
- - (and:SI (match_dup 0) (match_dup 1)))])]
- + [(set (match_dup 0)
- + (match_op_dup 1 [(and:SI (match_dup 2) (match_dup 3))
- + (const_int 0)]))
- + (set (match_dup 2)
- + (and:SI (match_dup 2) (match_dup 3)))])]
- "")
-
- ;; We don't need to handle HImode case, because it will be promoted to SImode
- ;; on ! TARGET_PARTIAL_REG_STALL
-
- (define_peephole2
- - [(set (reg 17)
- - (compare (and:QI (match_operand:QI 0 "register_operand" "")
- - (match_operand:QI 1 "immediate_operand" ""))
- - (const_int 0)))]
- + [(set (match_operand 0 "flags_reg_operand" "")
- + (match_operator 1 "compare_operator"
- + [(and:QI (match_operand:QI 2 "register_operand" "")
- + (match_operand:QI 3 "immediate_operand" ""))
- + (const_int 0)]))]
- "! TARGET_PARTIAL_REG_STALL
- && ix86_match_ccmode (insn, CCNOmode)
- - && true_regnum (operands[0]) != 0
- - && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))"
- + && true_regnum (operands[2]) != 0
- + && peep2_reg_dead_p (1, operands[2])"
- [(parallel
- - [(set (reg:CCNO 17)
- - (compare:CCNO (and:QI (match_dup 0)
- - (match_dup 1))
- - (const_int 0)))
- - (set (match_dup 0)
- - (and:QI (match_dup 0) (match_dup 1)))])]
- + [(set (match_dup 0)
- + (match_op_dup 1 [(and:QI (match_dup 2) (match_dup 3))
- + (const_int 0)]))
- + (set (match_dup 2)
- + (and:QI (match_dup 2) (match_dup 3)))])]
- "")
-
- (define_peephole2
- - [(set (reg 17)
- - (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)))]
- + [(set (match_operand 0 "flags_reg_operand" "")
- + (match_operator 1 "compare_operator"
- + [(and:SI
- + (zero_extract:SI
- + (match_operand 2 "ext_register_operand" "")
- + (const_int 8)
- + (const_int 8))
- + (match_operand 3 "const_int_operand" ""))
- + (const_int 0)]))]
- "! TARGET_PARTIAL_REG_STALL
- && ix86_match_ccmode (insn, CCNOmode)
- - && true_regnum (operands[0]) != 0
- - && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))"
- - [(parallel [(set (reg:CCNO 17)
- - (compare:CCNO
- - (and:SI
- - (zero_extract:SI
- - (match_dup 0)
- - (const_int 8)
- - (const_int 8))
- - (match_dup 1))
- - (const_int 0)))
- - (set (zero_extract:SI (match_dup 0)
- + && true_regnum (operands[2]) != 0
- + && peep2_reg_dead_p (1, operands[2])"
- + [(parallel [(set (match_dup 0)
- + (match_op_dup 1
- + [(and:SI
- + (zero_extract:SI
- + (match_dup 2)
- + (const_int 8)
- + (const_int 8))
- + (match_dup 3))
- + (const_int 0)]))
- + (set (zero_extract:SI (match_dup 2)
- (const_int 8)
- (const_int 8))
- (and:SI
- (zero_extract:SI
- - (match_dup 0)
- + (match_dup 2)
- (const_int 8)
- (const_int 8))
- - (match_dup 1)))])]
- + (match_dup 3)))])]
- "")
-
- ;; Don't do logical operations with memory inputs.
- @@ -17523,66 +17577,20 @@
- "")
-
- ;; Convert compares with 1 to shorter inc/dec operations when CF is not
- -;; required and register dies.
- -(define_peephole2
- - [(set (reg 17)
- - (compare (match_operand:SI 0 "register_operand" "")
- - (match_operand:SI 1 "incdec_operand" "")))]
- - "ix86_match_ccmode (insn, CCGCmode)
- - && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))"
- - [(parallel [(set (reg:CCGC 17)
- - (compare:CCGC (match_dup 0)
- - (match_dup 1)))
- - (clobber (match_dup 0))])]
- - "")
- -
- +;; required and register dies. Similarly for 128 to plus -128.
- (define_peephole2
- - [(set (reg 17)
- - (compare (match_operand:HI 0 "register_operand" "")
- - (match_operand:HI 1 "incdec_operand" "")))]
- - "ix86_match_ccmode (insn, CCGCmode)
- - && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))"
- - [(parallel [(set (reg:CCGC 17)
- - (compare:CCGC (match_dup 0)
- - (match_dup 1)))
- - (clobber (match_dup 0))])]
- - "")
- -
- -(define_peephole2
- - [(set (reg 17)
- - (compare (match_operand:QI 0 "register_operand" "")
- - (match_operand:QI 1 "incdec_operand" "")))]
- - "ix86_match_ccmode (insn, CCGCmode)
- - && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))"
- - [(parallel [(set (reg:CCGC 17)
- - (compare:CCGC (match_dup 0)
- - (match_dup 1)))
- - (clobber (match_dup 0))])]
- - "")
- -
- -;; Convert compares with 128 to shorter add -128
- -(define_peephole2
- - [(set (reg 17)
- - (compare (match_operand:SI 0 "register_operand" "")
- - (const_int 128)))]
- - "ix86_match_ccmode (insn, CCGCmode)
- - && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))"
- - [(parallel [(set (reg:CCGC 17)
- - (compare:CCGC (match_dup 0)
- - (const_int 128)))
- - (clobber (match_dup 0))])]
- - "")
- -
- -(define_peephole2
- - [(set (reg 17)
- - (compare (match_operand:HI 0 "register_operand" "")
- - (const_int 128)))]
- - "ix86_match_ccmode (insn, CCGCmode)
- - && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))"
- - [(parallel [(set (reg:CCGC 17)
- - (compare:CCGC (match_dup 0)
- - (const_int 128)))
- - (clobber (match_dup 0))])]
- + [(set (match_operand 0 "flags_reg_operand" "")
- + (match_operator 1 "compare_operator"
- + [(match_operand 2 "register_operand" "")
- + (match_operand 3 "const_int_operand" "")]))]
- + "(INTVAL (operands[3]) == -1
- + || INTVAL (operands[3]) == 1
- + || INTVAL (operands[3]) == 128)
- + && ix86_match_ccmode (insn, CCGCmode)
- + && peep2_reg_dead_p (1, operands[2])"
- + [(parallel [(set (match_dup 0)
- + (match_op_dup 1 [(match_dup 2) (match_dup 3)]))
- + (clobber (match_dup 2))])]
- "")
-
- (define_peephole2
- @@ -17780,9 +17788,9 @@
- return "call\t%P1";
- }
- if (SIBLING_CALL_P (insn))
- - return "jmp\t%*%1";
- + return "jmp\t%A1";
- else
- - return "call\t%*%1";
- + return "call\t%A1";
- }
- [(set_attr "type" "callv")])
-
- Index: gcc/config/ia64/ia64.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/ia64/ia64.c,v
- retrieving revision 1.198.2.22
- retrieving revision 1.198.2.24
- diff -u -r1.198.2.22 -r1.198.2.24
- --- gcc/gcc/config/ia64/ia64.c 17 Sep 2004 17:56:32 -0000 1.198.2.22
- +++ gcc/gcc/config/ia64/ia64.c 14 Jan 2005 19:15:40 -0000 1.198.2.24
- @@ -2884,10 +2884,13 @@
- preserve those input registers used as arguments to the sibling call.
- It is unclear how to compute that number here. */
- if (current_frame_info.n_input_regs != 0)
- - emit_insn (gen_alloc (gen_rtx_REG (DImode, fp),
- - GEN_INT (0), GEN_INT (0),
- - GEN_INT (current_frame_info.n_input_regs),
- - GEN_INT (0)));
- + {
- + rtx n_inputs = GEN_INT (current_frame_info.n_input_regs);
- + insn = emit_insn (gen_alloc (gen_rtx_REG (DImode, fp),
- + const0_rtx, const0_rtx,
- + n_inputs, const0_rtx));
- + RTX_FRAME_RELATED_P (insn) = 1;
- + }
- }
- }
-
- @@ -3021,15 +3024,16 @@
- int aligned_p;
- {
- if (size == (TARGET_ILP32 ? 4 : 8)
- - && aligned_p
- && !(TARGET_NO_PIC || TARGET_AUTO_PIC)
- && GET_CODE (x) == SYMBOL_REF
- && SYMBOL_REF_FLAG (x))
- {
- - if (TARGET_ILP32)
- - fputs ("\tdata4\t@fptr(", asm_out_file);
- - else
- - fputs ("\tdata8\t@fptr(", asm_out_file);
- + static const char * const directive[2][2] = {
- + /* 64-bit pointer */ /* 32-bit pointer */
- + { "\tdata8.ua\t@fptr(", "\tdata4.ua\t@fptr("}, /* unaligned */
- + { "\tdata8\t@fptr(", "\tdata4\t@fptr("} /* aligned */
- + };
- + fputs (directive[aligned_p != 0][TARGET_ILP32 != 0], asm_out_file);
- output_addr_const (asm_out_file, x);
- fputs (")\n", asm_out_file);
- return true;
- @@ -7451,13 +7455,24 @@
- {
- dest_regno = REGNO (dest);
-
- - /* If this isn't the final destination for ar.pfs, the alloc
- - shouldn't have been marked frame related. */
- - if (dest_regno != current_frame_info.reg_save_ar_pfs)
- - abort ();
- -
- - fprintf (asm_out_file, "\t.save ar.pfs, r%d\n",
- - ia64_dbx_register_number (dest_regno));
- + /* If this is the final destination for ar.pfs, then this must
- + be the alloc in the prologue. */
- + if (dest_regno == current_frame_info.reg_save_ar_pfs)
- + fprintf (asm_out_file, "\t.save ar.pfs, r%d\n",
- + ia64_dbx_register_number (dest_regno));
- + else
- + {
- + /* This must be an alloc before a sibcall. We must drop the
- + old frame info. The easiest way to drop the old frame
- + info is to ensure we had a ".restore sp" directive
- + followed by a new prologue. If the procedure doesn't
- + have a memory-stack frame, we'll issue a dummy ".restore
- + sp" now. */
- + if (current_frame_info.total_size == 0 && !frame_pointer_needed)
- + /* if haven't done process_epilogue() yet, do it now */
- + process_epilogue ();
- + fprintf (asm_out_file, "\t.prologue\n");
- + }
- return 1;
- }
-
- Index: gcc/config/m68hc11/t-m68hc11-gas
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/m68hc11/t-m68hc11-gas,v
- retrieving revision 1.7.14.3
- retrieving revision 1.7.14.4
- diff -u -r1.7.14.3 -r1.7.14.4
- --- gcc/gcc/config/m68hc11/t-m68hc11-gas 4 Oct 2003 19:45:57 -0000 1.7.14.3
- +++ gcc/gcc/config/m68hc11/t-m68hc11-gas 28 Jan 2005 22:21:39 -0000 1.7.14.4
- @@ -53,7 +53,7 @@
- dp-bit.c: $(srcdir)/config/fp-bit.c
- echo '#define SMALL_MACHINE' >> dp-bit.c
- echo '#define CMPtype HItype' >> dp-bit.c
- - echo '#ifdef __LITTLE_ENDIAN__' > dp-bit.c
- + echo '#ifdef __LITTLE_ENDIAN__' >> dp-bit.c
- echo '#define FLOAT_BIT_ORDER_MISMATCH' >>dp-bit.c
- echo '#endif' >> dp-bit.c
- cat $(srcdir)/config/fp-bit.c >> dp-bit.c
- Index: gcc/config/mips/mips-protos.h
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/mips/mips-protos.h,v
- retrieving revision 1.30.4.1
- retrieving revision 1.30.4.2
- diff -u -r1.30.4.1 -r1.30.4.2
- --- gcc/gcc/config/mips/mips-protos.h 31 Jan 2003 23:51:22 -0000 1.30.4.1
- +++ gcc/gcc/config/mips/mips-protos.h 8 Jan 2005 14:33:32 -0000 1.30.4.2
- @@ -1,6 +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, 2002 Free Software Foundation, Inc.
- + 1999, 2001, 2002, 2005 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
- @@ -36,9 +36,13 @@
- 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_output_aligned_decl_common
- + PARAMS ((FILE *, tree, const char *,
- + unsigned HOST_WIDE_INT,
- + unsigned int));
- +extern void mips_declare_object
- + PARAMS ((FILE *, const char *, const char *,
- + const char *, ...));
- extern void mips_expand_epilogue PARAMS ((void));
- extern void mips_expand_prologue PARAMS ((void));
- extern void mips_output_filename PARAMS ((FILE *, const char *));
- Index: gcc/config/mips/mips.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.c,v
- retrieving revision 1.241.2.4
- retrieving revision 1.241.2.5
- diff -u -r1.241.2.4 -r1.241.2.5
- --- gcc/gcc/config/mips/mips.c 27 Jun 2003 11:44:23 -0000 1.241.2.4
- +++ gcc/gcc/config/mips/mips.c 8 Jan 2005 14:33:33 -0000 1.241.2.5
- @@ -1,6 +1,6 @@
- /* Subroutines for insn-output.c for MIPS
- Copyright (C) 1989, 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998,
- - 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- + 1999, 2000, 2001, 2002, 2005 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
- @@ -6562,26 +6562,84 @@
- fatal_io_error ("can't close temp file");
- }
-
- -/* Emit either a label, .comm, or .lcomm directive, and mark that the symbol
- - is used, so that we don't emit an .extern for it in mips_asm_file_end. */
- +/* Implement ASM_OUTPUT_ALIGNED_DECL_COMMON. This is usually the same as
- + the elfos.h version, but we also need to handle -muninit-const-in-rodata
- + and the limitations of the SGI o32 assembler. */
-
- void
- -mips_declare_object (stream, name, init_string, final_string, size)
- +mips_output_aligned_decl_common (stream, decl, name, size, align)
- FILE *stream;
- + tree decl;
- const char *name;
- - const char *init_string;
- - const char *final_string;
- - int size;
- + unsigned HOST_WIDE_INT size;
- + unsigned int align;
- {
- - fputs (init_string, stream); /* "", "\t.comm\t", or "\t.lcomm\t" */
- + const char *format;
- +
- + /* If the target wants uninitialized const declarations in
- + .rdata then don't put them in .comm. */
- + if (TARGET_EMBEDDED_DATA && TARGET_UNINIT_CONST_IN_RODATA
- + && TREE_CODE (decl) == VAR_DECL && TREE_READONLY (decl)
- + && (DECL_INITIAL (decl) == 0 || DECL_INITIAL (decl) == error_mark_node))
- + {
- + if (TREE_PUBLIC (decl) && DECL_NAME (decl))
- + targetm.asm_out.globalize_label (stream, name);
- +
- + readonly_data_section ();
- + ASM_OUTPUT_ALIGN (stream, floor_log2 (align / BITS_PER_UNIT));
- +
- + format = ACONCAT ((":\n\t.space\t", HOST_WIDE_INT_PRINT_UNSIGNED,
- + "\n", NULL));
- + mips_declare_object (stream, name, "", format, size);
- + }
- +#ifdef TARGET_IRIX6
- + /* The SGI o32 assembler doesn't accept an alignment, so round up
- + the size instead. */
- + else if (mips_abi == ABI_32 && !TARGET_GAS)
- + {
- + size += (align / BITS_PER_UNIT) - 1;
- + size -= size % (align / BITS_PER_UNIT);
- + format = ACONCAT ((",", HOST_WIDE_INT_PRINT_UNSIGNED, "\n", NULL));
- + mips_declare_object (stream, name, "\n\t.comm\t", format, size);
- + }
- +#endif
- + else
- + {
- + format = ACONCAT ((",", HOST_WIDE_INT_PRINT_UNSIGNED, ",%u\n", NULL));
- + mips_declare_object (stream, name, "\n\t.comm\t", format,
- + size, align / BITS_PER_UNIT);
- + }
- +}
- +
- +/* Emit either a label, .comm, or .lcomm directive. When using assembler
- + macros, mark the symbol as written so that mips_file_end won't emit an
- + .extern for it. STREAM is the output file, NAME is the name of the
- + symbol, INIT_STRING is the string that should be written before the
- + symbol and FINAL_STRING is the string that shoulbe written after it.
- + FINAL_STRING is a printf() format that consumes the remaining arguments. */
- +
- +void
- +mips_declare_object VPARAMS ((FILE *stream, const char *name,
- + const char *init_string,
- + const char *final_string, ...))
- +{
- + VA_OPEN (ap, final_string);
- + VA_FIXEDARG (ap, FILE *, stream);
- + VA_FIXEDARG (ap, const char *, name);
- + VA_FIXEDARG (ap, const char *, init_string);
- + VA_FIXEDARG (ap, const char *, final_string);
- +
- + fputs (init_string, stream);
- assemble_name (stream, name);
- - fprintf (stream, final_string, size); /* ":\n", ",%u\n", ",%u\n" */
- + vfprintf (stream, final_string, ap);
-
- if (TARGET_GP_OPT)
- {
- tree name_tree = get_identifier (name);
- TREE_ASM_WRITTEN (name_tree) = 1;
- }
- +
- + VA_CLOSE (ap);
- }
-
- /* Return the bytes needed to compute the frame pointer from the current
- Index: gcc/config/mips/mips.h
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.h,v
- retrieving revision 1.227.4.6
- retrieving revision 1.227.4.7
- diff -u -r1.227.4.6 -r1.227.4.7
- --- gcc/gcc/config/mips/mips.h 30 May 2003 12:00:42 -0000 1.227.4.6
- +++ gcc/gcc/config/mips/mips.h 8 Jan 2005 14:33:34 -0000 1.227.4.7
- @@ -1,6 +1,6 @@
- /* Definitions of target machine for GNU compiler. MIPS version.
- Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998
- - 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
- + 1999, 2000, 2001, 2002, 2003, 2005 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
- @@ -4326,28 +4326,7 @@
-
- /* This says how to define a global common symbol. */
-
- -#define ASM_OUTPUT_ALIGNED_DECL_COMMON(STREAM, DECL, NAME, SIZE, ALIGN) \
- - do { \
- - /* If the target wants uninitialized const declarations in \
- - .rdata then don't put them in .comm */ \
- - if (TARGET_EMBEDDED_DATA && TARGET_UNINIT_CONST_IN_RODATA \
- - && TREE_CODE (DECL) == VAR_DECL && TREE_READONLY (DECL) \
- - && (DECL_INITIAL (DECL) == 0 \
- - || DECL_INITIAL (DECL) == error_mark_node)) \
- - { \
- - if (TREE_PUBLIC (DECL) && DECL_NAME (DECL)) \
- - (*targetm.asm_out.globalize_label) (STREAM, NAME); \
- - \
- - readonly_data_section (); \
- - ASM_OUTPUT_ALIGN (STREAM, floor_log2 (ALIGN / BITS_PER_UNIT)); \
- - mips_declare_object (STREAM, NAME, "", ":\n\t.space\t%u\n", \
- - (SIZE)); \
- - } \
- - else \
- - mips_declare_object (STREAM, NAME, "\n\t.comm\t", ",%u\n", \
- - (SIZE)); \
- - } while (0)
- -
- +#define ASM_OUTPUT_ALIGNED_DECL_COMMON mips_output_aligned_decl_common
-
- /* This says how to define a local common symbol (ie, not visible to
- linker). */
- Index: gcc/config/mips/mips.md
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.md,v
- retrieving revision 1.153.2.5
- retrieving revision 1.153.2.6
- diff -u -r1.153.2.5 -r1.153.2.6
- --- gcc/gcc/config/mips/mips.md 27 Mar 2004 10:35:03 -0000 1.153.2.5
- +++ gcc/gcc/config/mips/mips.md 8 Jan 2005 14:11:12 -0000 1.153.2.6
- @@ -1,6 +1,6 @@
- ;; Mips.md Machine Description for MIPS based processors
- ;; Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- -;; 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- +;; 1999, 2000, 2001, 2002, 2005 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
- @@ -163,7 +163,8 @@
-
- ;; Describe a user's asm statement.
- (define_asm_attributes
- - [(set_attr "type" "multi")])
- + [(set_attr "type" "multi")
- + (set_attr "can_delay" "no")])
-
- ;; whether or not generating calls to position independent functions
- (define_attr "abicalls" "no,yes"
- Index: gcc/config/pa/pa32-linux.h
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/pa/pa32-linux.h,v
- retrieving revision 1.10
- retrieving revision 1.10.2.1
- diff -u -r1.10 -r1.10.2.1
- --- gcc/gcc/config/pa/pa32-linux.h 6 Dec 2002 02:54:38 -0000 1.10
- +++ gcc/gcc/config/pa/pa32-linux.h 27 Dec 2004 02:55:49 -0000 1.10.2.1
- @@ -28,7 +28,7 @@
- pointer into the frame. This target does not need multiple
- subspace stubs, so we allow sibcalls to all functions. */
- #undef FUNCTION_OK_FOR_SIBCALL
- -#define FUNCTION_OK_FOR_SIBCALL(DECL) 1
- +#define FUNCTION_OK_FOR_SIBCALL(DECL) (!TARGET_PORTABLE_RUNTIME)
-
- /* The libcall __canonicalize_funcptr_for_compare is referenced in
- crtend.o and the reference isn't resolved in objects that don't
- Index: gcc/config/rs6000/rs6000.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.c,v
- retrieving revision 1.403.2.14
- retrieving revision 1.403.2.16
- diff -u -r1.403.2.14 -r1.403.2.16
- --- gcc/gcc/config/rs6000/rs6000.c 14 Jan 2004 14:03:58 -0000 1.403.2.14
- +++ gcc/gcc/config/rs6000/rs6000.c 1 Dec 2004 06:13:16 -0000 1.403.2.16
- @@ -150,7 +150,8 @@
- /* Call distance, overridden by -mlongcall and #pragma longcall(1).
- The only place that looks at this is rs6000_set_default_type_attributes;
- everywhere else should rely on the presence or absence of a longcall
- - attribute on the function declaration. */
- + attribute on the function declaration. Exception: init_cumulative_args
- + looks at it too, for libcalls. */
- int rs6000_default_long_calls;
- const char *rs6000_longcall_switch;
-
- @@ -2910,10 +2911,11 @@
- cum->orig_nargs = cum->nargs_prototype;
-
- /* Check for a longcall attribute. */
- - if (fntype
- - && lookup_attribute ("longcall", TYPE_ATTRIBUTES (fntype))
- - && !lookup_attribute ("shortcall", TYPE_ATTRIBUTES (fntype)))
- - cum->call_cookie = CALL_LONG;
- + if ((!fntype && rs6000_default_long_calls)
- + || (fntype
- + && lookup_attribute ("longcall", TYPE_ATTRIBUTES (fntype))
- + && !lookup_attribute ("shortcall", TYPE_ATTRIBUTES (fntype))))
- + cum->call_cookie |= CALL_LONG;
-
- if (TARGET_DEBUG_ARG)
- {
- @@ -10356,8 +10358,10 @@
- rtx reg, mem, vrsave;
- int offset;
-
- - /* Get VRSAVE onto a GPR. */
- - reg = gen_rtx_REG (SImode, 12);
- + /* Get VRSAVE onto a GPR. Note that ABI_V4 might be using r12
- + as frame_reg_rtx and r11 as the static chain pointer for
- + nested functions. */
- + reg = gen_rtx_REG (SImode, 0);
- vrsave = gen_rtx_REG (SImode, VRSAVE_REGNO);
- if (TARGET_MACHO)
- emit_insn (gen_get_vrsave_internal (reg));
- Index: gcc/config/rs6000/rs6000.md
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.md,v
- retrieving revision 1.224.2.6
- retrieving revision 1.224.2.7
- diff -u -r1.224.2.6 -r1.224.2.7
- --- gcc/gcc/config/rs6000/rs6000.md 8 Mar 2004 04:20:45 -0000 1.224.2.6
- +++ gcc/gcc/config/rs6000/rs6000.md 24 Dec 2004 23:17:06 -0000 1.224.2.7
- @@ -3124,61 +3124,6 @@
- }"
- [(set_attr "length" "8")])
-
- -(define_insn_and_split "*andsi3_internal7"
- - [(set (match_operand:CC 2 "cc_reg_operand" "=x,?y")
- - (compare:CC (and:SI (match_operand:SI 0 "gpc_reg_operand" "r,r")
- - (match_operand:SI 1 "mask_operand_wrap" "i,i"))
- - (const_int 0)))
- - (clobber (match_scratch:SI 3 "=r,r"))]
- - "TARGET_POWERPC64"
- - "#"
- - "TARGET_POWERPC64"
- - [(parallel [(set (match_dup 2)
- - (compare:CC (and:SI (rotate:SI (match_dup 0) (match_dup 4))
- - (match_dup 5))
- - (const_int 0)))
- - (clobber (match_dup 3))])]
- - "
- -{
- - int mb = extract_MB (operands[1]);
- - int me = extract_ME (operands[1]);
- - operands[4] = GEN_INT (me + 1);
- - operands[5] = GEN_INT (~((HOST_WIDE_INT) -1 << (33 + me - mb)));
- -}"
- - [(set_attr "type" "delayed_compare,compare")
- - (set_attr "length" "4,8")])
- -
- -(define_insn_and_split "*andsi3_internal8"
- - [(set (match_operand:CC 3 "cc_reg_operand" "=x,??y")
- - (compare:CC (and:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
- - (match_operand:SI 2 "mask_operand_wrap" "i,i"))
- - (const_int 0)))
- - (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
- - (and:SI (match_dup 1)
- - (match_dup 2)))]
- - "TARGET_POWERPC64"
- - "#"
- - "TARGET_POWERPC64"
- - [(parallel [(set (match_dup 3)
- - (compare:CC (and:SI (rotate:SI (match_dup 1) (match_dup 4))
- - (match_dup 5))
- - (const_int 0)))
- - (set (match_dup 0)
- - (and:SI (rotate:SI (match_dup 1) (match_dup 4))
- - (match_dup 5)))])
- - (set (match_dup 0)
- - (rotate:SI (match_dup 0) (match_dup 6)))]
- - "
- -{
- - int mb = extract_MB (operands[2]);
- - int me = extract_ME (operands[2]);
- - operands[4] = GEN_INT (me + 1);
- - operands[6] = GEN_INT (32 - (me + 1));
- - operands[5] = GEN_INT (~((HOST_WIDE_INT) -1 << (33 + me - mb)));
- -}"
- - [(set_attr "type" "delayed_compare,compare")
- - (set_attr "length" "8,12")])
- -
- (define_expand "iorsi3"
- [(set (match_operand:SI 0 "gpc_reg_operand" "")
- (ior:SI (match_operand:SI 1 "gpc_reg_operand" "")
- Index: gcc/config/s390/s390.md
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/s390/s390.md,v
- retrieving revision 1.41.2.12
- retrieving revision 1.41.2.13
- diff -u -r1.41.2.12 -r1.41.2.13
- --- gcc/gcc/config/s390/s390.md 3 Aug 2004 20:06:51 -0000 1.41.2.12
- +++ gcc/gcc/config/s390/s390.md 27 Jan 2005 23:38:39 -0000 1.41.2.13
- @@ -910,11 +910,13 @@
- })
-
- (define_expand "reload_outti"
- - [(parallel [(match_operand:TI 0 "memory_operand" "")
- + [(parallel [(match_operand:TI 0 "" "")
- (match_operand:TI 1 "register_operand" "d")
- (match_operand:DI 2 "register_operand" "=&a")])]
- "TARGET_64BIT"
- {
- + if (GET_CODE (operands[0]) != MEM)
- + abort ();
- s390_load_address (operands[2], XEXP (operands[0], 0));
- operands[0] = replace_equiv_address (operands[0], operands[2]);
- emit_move_insn (operands[0], operands[1]);
- @@ -1060,11 +1062,13 @@
- })
-
- (define_expand "reload_outdi"
- - [(parallel [(match_operand:DI 0 "memory_operand" "")
- + [(parallel [(match_operand:DI 0 "" "")
- (match_operand:DI 1 "register_operand" "d")
- (match_operand:SI 2 "register_operand" "=&a")])]
- "!TARGET_64BIT"
- {
- + if (GET_CODE (operands[0]) != MEM)
- + abort ();
- s390_load_address (operands[2], XEXP (operands[0], 0));
- operands[0] = replace_equiv_address (operands[0], operands[2]);
- emit_move_insn (operands[0], operands[1]);
- @@ -1374,11 +1378,13 @@
- })
-
- (define_expand "reload_outdf"
- - [(parallel [(match_operand:DF 0 "memory_operand" "")
- + [(parallel [(match_operand:DF 0 "" "")
- (match_operand:DF 1 "register_operand" "d")
- (match_operand:SI 2 "register_operand" "=&a")])]
- "!TARGET_64BIT"
- {
- + if (GET_CODE (operands[0]) != MEM)
- + abort ();
- s390_load_address (operands[2], XEXP (operands[0], 0));
- operands[0] = replace_equiv_address (operands[0], operands[2]);
- emit_move_insn (operands[0], operands[1]);
- Index: gcc/config/sparc/sparc.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/sparc/sparc.c,v
- retrieving revision 1.233.4.12
- retrieving revision 1.233.4.13
- diff -u -r1.233.4.12 -r1.233.4.13
- --- gcc/gcc/config/sparc/sparc.c 17 Jul 2004 19:49:21 -0000 1.233.4.12
- +++ gcc/gcc/config/sparc/sparc.c 14 Oct 2004 06:54:26 -0000 1.233.4.13
- @@ -178,6 +178,8 @@
- static void sparc_encode_section_info PARAMS ((tree, int));
- static void sparc_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT,
- HOST_WIDE_INT, tree));
- +static bool sparc_can_output_mi_thunk PARAMS ((tree, HOST_WIDE_INT,
- + HOST_WIDE_INT, tree));
-
- /* Option handling. */
-
- @@ -244,7 +246,7 @@
- #undef TARGET_ASM_OUTPUT_MI_THUNK
- #define TARGET_ASM_OUTPUT_MI_THUNK sparc_output_mi_thunk
- #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
- -#define TARGET_ASM_CAN_OUTPUT_MI_THUNK default_can_output_mi_thunk_no_vcall
- +#define TARGET_ASM_CAN_OUTPUT_MI_THUNK sparc_can_output_mi_thunk
-
- struct gcc_target targetm = TARGET_INITIALIZER;
-
- @@ -8622,18 +8624,21 @@
- SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 1;
- }
-
- -/* Output code to add DELTA to the first argument, and then jump to FUNCTION.
- - Used for C++ multiple inheritance. */
- +/* Output the assembler code for a thunk function. THUNK_DECL is the
- + declaration for the thunk function itself, FUNCTION is the decl for
- + the target function. DELTA is an immediate constant offset to be
- + added to THIS. If VCALL_OFFSET is nonzero, the word at address
- + (*THIS + VCALL_OFFSET) should be additionally added to THIS. */
-
- static void
- sparc_output_mi_thunk (file, thunk_fndecl, delta, vcall_offset, function)
- FILE *file;
- tree thunk_fndecl ATTRIBUTE_UNUSED;
- HOST_WIDE_INT delta;
- - HOST_WIDE_INT vcall_offset ATTRIBUTE_UNUSED;
- + HOST_WIDE_INT vcall_offset;
- tree function;
- {
- - rtx this, insn, funexp, delta_rtx, tmp;
- + rtx this, insn, funexp;
-
- reload_completed = 1;
- no_new_pseudos = 1;
- @@ -8650,26 +8655,73 @@
-
- /* Add DELTA. When possible use a plain add, otherwise load it into
- a register first. */
- - delta_rtx = GEN_INT (delta);
- - if (!SPARC_SIMM13_P (delta))
- + if (delta)
- {
- + rtx delta_rtx = GEN_INT (delta);
- +
- + if (! SPARC_SIMM13_P (delta))
- + {
- + rtx scratch = gen_rtx_REG (Pmode, 1);
- + emit_move_insn (scratch, delta_rtx);
- + delta_rtx = scratch;
- + }
- +
- + /* THIS += DELTA. */
- + emit_insn (gen_add2_insn (this, delta_rtx));
- + }
- +
- + /* Add the word at address (*THIS + VCALL_OFFSET). */
- + if (vcall_offset)
- + {
- + rtx vcall_offset_rtx = GEN_INT (vcall_offset);
- rtx scratch = gen_rtx_REG (Pmode, 1);
-
- - if (input_operand (delta_rtx, GET_MODE (scratch)))
- - emit_insn (gen_rtx_SET (VOIDmode, scratch, delta_rtx));
- + if (vcall_offset >= 0)
- + abort ();
- +
- + /* SCRATCH = *THIS. */
- + emit_move_insn (scratch, gen_rtx_MEM (Pmode, this));
- +
- + /* Prepare for adding VCALL_OFFSET. The difficulty is that we
- + may not have any available scratch register at this point. */
- + if (SPARC_SIMM13_P (vcall_offset))
- + ;
- + /* This is the case if ARCH64 (unless -ffixed-g5 is passed). */
- + else if (! fixed_regs[5]
- + /* The below sequence is made up of at least 2 insns,
- + while the default method may need only one. */
- + && vcall_offset < -8192)
- + {
- + rtx scratch2 = gen_rtx_REG (Pmode, 5);
- + emit_move_insn (scratch2, vcall_offset_rtx);
- + vcall_offset_rtx = scratch2;
- + }
- else
- {
- - if (TARGET_ARCH64)
- - sparc_emit_set_const64 (scratch, delta_rtx);
- - else
- - sparc_emit_set_const32 (scratch, delta_rtx);
- + rtx increment = GEN_INT (-4096);
- +
- + /* VCALL_OFFSET is a negative number whose typical range can be
- + estimated as -32768..0 in 32-bit mode. In almost all cases
- + it is therefore cheaper to emit multiple add insns than
- + spilling and loading the constant into a register (at least
- + 6 insns). */
- + while (! SPARC_SIMM13_P (vcall_offset))
- + {
- + emit_insn (gen_add2_insn (scratch, increment));
- + vcall_offset += 4096;
- + }
- + vcall_offset_rtx = GEN_INT (vcall_offset); /* cannot be 0 */
- }
-
- - delta_rtx = scratch;
- - }
- + /* SCRATCH = *(*THIS + VCALL_OFFSET). */
- + emit_move_insn (scratch, gen_rtx_MEM (Pmode,
- + gen_rtx_PLUS (Pmode,
- + scratch,
- + vcall_offset_rtx)));
-
- - tmp = gen_rtx_PLUS (Pmode, this, delta_rtx);
- - emit_insn (gen_rtx_SET (VOIDmode, this, tmp));
- + /* THIS += *(*THIS + VCALL_OFFSET). */
- + emit_insn (gen_add2_insn (this, scratch));
- + }
-
- /* Generate a tail call to the target function. */
- if (! TREE_USED (function))
- @@ -8697,4 +8749,18 @@
- no_new_pseudos = 0;
- }
-
- +/* Return true if sparc_output_mi_thunk would be able to output the
- + assembler code for the thunk function specified by the arguments
- + it is passed, and false otherwise. */
- +static bool
- +sparc_can_output_mi_thunk (thunk_fndecl, delta, vcall_offset, function)
- + tree thunk_fndecl ATTRIBUTE_UNUSED;
- + HOST_WIDE_INT delta ATTRIBUTE_UNUSED;
- + HOST_WIDE_INT vcall_offset;
- + tree function ATTRIBUTE_UNUSED;
- +{
- + /* Bound the loop used in the default method above. */
- + return (vcall_offset >= -32768 || ! fixed_regs[5]);
- +}
- +
- #include "gt-sparc.h"
- Index: gcc/config/sparc/sparc.md
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/sparc/sparc.md,v
- retrieving revision 1.181.4.13
- retrieving revision 1.181.4.14
- diff -u -r1.181.4.13 -r1.181.4.14
- --- gcc/gcc/config/sparc/sparc.md 17 Jul 2004 19:49:21 -0000 1.181.4.13
- +++ gcc/gcc/config/sparc/sparc.md 14 Oct 2004 06:54:27 -0000 1.181.4.14
- @@ -2048,7 +2048,6 @@
- if (! CONSTANT_P (operands[1]) || input_operand (operands[1], DImode))
- ;
- else if (TARGET_ARCH64
- - && CONSTANT_P (operands[1])
- && GET_CODE (operands[1]) != HIGH
- && GET_CODE (operands[1]) != LO_SUM)
- {
- Index: gcc/config/vax/vax.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/vax/vax.c,v
- retrieving revision 1.38
- retrieving revision 1.38.4.1
- diff -u -r1.38 -r1.38.4.1
- --- gcc/gcc/config/vax/vax.c 22 Oct 2002 23:05:24 -0000 1.38
- +++ gcc/gcc/config/vax/vax.c 28 Dec 2004 06:29:59 -0000 1.38.4.1
- @@ -462,7 +462,7 @@
- case CONST_INT:
- /* byte offsets cost nothing (on a VAX 2, they cost 1 cycle) */
- if (offset == 0)
- - offset = (unsigned)(INTVAL(addr)+128) > 256;
- + offset = (unsigned HOST_WIDE_INT)(INTVAL(addr)+128) > 256;
- break;
- case CONST:
- case SYMBOL_REF:
- @@ -595,13 +595,13 @@
- fmt = "e"; /* all constant rotate counts are short */
- break;
- case PLUS:
- - /* Check for small negative integer operand: subl2 can be used with
- - a short positive constant instead. */
- - if (GET_CODE (XEXP (x, 1)) == CONST_INT)
- - if ((unsigned)(INTVAL (XEXP (x, 1)) + 63) < 127)
- - fmt = "e";
- case MINUS:
- c = (mode == DFmode) ? 13 : 8; /* 6/8 on VAX 9000, 16/15 on VAX 2 */
- + /* Small integer operands can use subl2 and addl2. */
- + if ((GET_CODE (XEXP (x, 1)) == CONST_INT)
- + && (unsigned HOST_WIDE_INT)(INTVAL (XEXP (x, 1)) + 63) < 127)
- + fmt = "e";
- + break;
- case IOR:
- case XOR:
- c = 3;
- @@ -611,7 +611,7 @@
- c = 3;
- if (GET_CODE (XEXP (x, 0)) == CONST_INT)
- {
- - if ((unsigned)~INTVAL (XEXP (x, 0)) > 63)
- + if ((unsigned HOST_WIDE_INT)~INTVAL (XEXP (x, 0)) > 63)
- c = 4;
- fmt = "e";
- i = 1;
- @@ -665,7 +665,8 @@
- switch (code)
- {
- case CONST_INT:
- - if ((unsigned)INTVAL (op) > 63 && GET_MODE (x) != QImode)
- + if ((unsigned HOST_WIDE_INT)INTVAL (op) > 63
- + && GET_MODE (x) != QImode)
- c += 1; /* 2 on VAX 2 */
- break;
- case CONST:
- Index: gcc/config/vax/vax.h
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/vax/vax.h,v
- retrieving revision 1.54
- retrieving revision 1.54.4.1
- diff -u -r1.54 -r1.54.4.1
- --- gcc/gcc/config/vax/vax.h 22 Oct 2002 23:05:24 -0000 1.54
- +++ gcc/gcc/config/vax/vax.h 28 Dec 2004 06:28:01 -0000 1.54.4.1
- @@ -800,11 +800,6 @@
- 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
- - when the index is out of range. Don't define it if the case insn
- - jumps to the default label instead. */
- -#define CASE_DROPS_THROUGH
- -
- /* Indicate that jump tables go in the text section. This is
- necessary when compiling PIC code. */
- #define JUMP_TABLES_IN_TEXT_SECTION 1
- Index: gcc/config/vax/vax.md
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/config/vax/vax.md,v
- retrieving revision 1.23
- retrieving revision 1.23.4.1
- diff -u -r1.23 -r1.23.4.1
- --- gcc/gcc/config/vax/vax.md 1 Oct 2002 20:16:04 -0000 1.23
- +++ gcc/gcc/config/vax/vax.md 28 Dec 2004 06:28:01 -0000 1.23.4.1
- @@ -1969,68 +1969,63 @@
- "jmp (%0)")
-
- ;; This is here to accept 5 arguments (as passed by expand_end_case)
- -;; and pass the first 4 along to the casesi1 pattern that really does the work.
- +;; and pass the first 4 along to the casesi1 pattern that really does
- +;; the actual casesi work. We emit a jump here to the default label
- +;; _before_ the casesi so that we can be sure that the casesi never
- +;; drops through.
- +;; This is suboptimal perhaps, but so is much of the rest of this
- +;; machine description. For what it's worth, HPPA uses the same trick.
- +;;
- +;; operand 0 is index
- +;; operand 1 is the minimum bound (a const_int)
- +;; operand 2 is the maximum bound - minimum bound + 1 (also a const_int)
- +;; operand 3 is CODE_LABEL for the table;
- +;; operand 4 is the CODE_LABEL to go to if index out of range (ie. default).
- +;;
- +;; We emit:
- +;; i = index - minimum_bound
- +;; if (i > (maximum_bound - minimum_bound + 1) goto default;
- +;; casesi (i, 0, table);
- +;;
- (define_expand "casesi"
- - [(match_operand:SI 0 "general_operand" "") ; index
- - (match_operand:SI 1 "general_operand" "") ; lower
- - (match_operand:SI 2 "general_operand" "") ; upper-lower
- - (match_operand 3 "" "") ; table label
- - (match_operand 4 "" "")] ; default label
- - ""
- -{
- - emit_jump_insn (gen_casesi1 (operands[0], operands[1],
- - operands[2], operands[3]));
- + [(match_operand:SI 0 "general_operand" "")
- + (match_operand:SI 1 "general_operand" "")
- + (match_operand:SI 2 "general_operand" "")
- + (match_operand 3 "" "")
- + (match_operand 4 "" "")]
- + ""
- +{
- + /* i = index - minimum_bound;
- + But only if the lower bound is not already zero. */
- + if (operands[1] != const0_rtx)
- + {
- + rtx index = gen_reg_rtx (SImode);
- + emit_insn (gen_addsi3 (index,
- + operands[0],
- + GEN_INT (-INTVAL (operands[1]))));
- + operands[0] = index;
- + }
- +
- + /* if (i > (maximum_bound - minimum_bound + 1) goto default; */
- + emit_insn (gen_cmpsi (operands[0], operands[2]));
- + emit_jump_insn (gen_bgtu (operands[4]));
- +
- + /* casesi (i, 0, table); */
- + emit_jump_insn (gen_casesi1 (operands[0], operands[2], operands[3]));
- DONE;
- })
-
- +;; This insn is a bit of a lier. It actually falls through if no case
- +;; matches. But, we prevent that from ever happening by emiting a jump
- +;; before this, see the define_expand above.
- (define_insn "casesi1"
- - [(set (pc)
- - (if_then_else
- - (leu (minus:SI (match_operand:SI 0 "general_operand" "g")
- - (match_operand:SI 1 "general_operand" "g"))
- - (match_operand:SI 2 "general_operand" "g"))
- - (plus:SI (sign_extend:SI
- - (mem:HI (plus:SI (mult:SI (minus:SI (match_dup 0)
- - (match_dup 1))
- - (const_int 2))
- - (pc))))
- - (label_ref:SI (match_operand 3 "" "")))
- - (pc)))]
- - ""
- - "casel %0,%1,%2")
- -
- -;; This can arise by simplification when operand 1 is a constant int.
- -(define_insn ""
- - [(set (pc)
- - (if_then_else
- - (leu (plus:SI (match_operand:SI 0 "general_operand" "g")
- - (match_operand:SI 1 "const_int_operand" "n"))
- - (match_operand:SI 2 "general_operand" "g"))
- - (plus:SI (sign_extend:SI
- - (mem:HI (plus:SI (mult:SI (plus:SI (match_dup 0)
- - (match_dup 1))
- - (const_int 2))
- - (pc))))
- - (label_ref:SI (match_operand 3 "" "")))
- - (pc)))]
- - ""
- - "*
- -{
- - operands[1] = GEN_INT (-INTVAL (operands[1]));
- - return \"casel %0,%1,%2\";
- -}")
- -
- -;; This can arise by simplification when the base for the case insn is zero.
- -(define_insn ""
- - [(set (pc)
- - (if_then_else (leu (match_operand:SI 0 "general_operand" "g")
- - (match_operand:SI 1 "general_operand" "g"))
- - (plus:SI (sign_extend:SI
- - (mem:HI (plus:SI (mult:SI (match_dup 0)
- - (const_int 2))
- - (pc))))
- - (label_ref:SI (match_operand 2 "" "")))
- - (pc)))]
- + [(match_operand:SI 1 "const_int_operand" "n")
- + (set (pc)
- + (plus:SI (sign_extend:SI
- + (mem:HI (plus:SI (mult:SI (match_operand:SI 0 "general_operand" "g")
- + (const_int 2))
- + (pc))))
- + (label_ref:SI (match_operand 2 "" ""))))]
- ""
- "casel %0,$0,%1")
-
- Index: gcc/cp/ChangeLog
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/cp/ChangeLog,v
- retrieving revision 1.3076.2.277
- retrieving revision 1.3076.2.281
- diff -u -r1.3076.2.277 -r1.3076.2.281
- --- gcc/gcc/cp/ChangeLog 30 Sep 2004 16:44:00 -0000 1.3076.2.277
- +++ gcc/gcc/cp/ChangeLog 18 Dec 2004 20:26:04 -0000 1.3076.2.281
- @@ -1,3 +1,25 @@
- +2004-12-18 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
- +
- + PR c++/17456
- + * cvt.c (convert_to_void): Set expr to void_zero_node after
- + overload failure.
- +
- +2004-12-15 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
- +
- + PR c++/16806
- + * error.c (dump_expr) [BASELINK]: Use dump_expr.
- +
- +2004-12-10 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
- +
- + PR c++/17868
- + * error.c (dump_expr): Add missing case for RDIV_EXPR.
- +
- +2004-12-09 Nathan Sidwell <nathan@codesourcery.com>
- +
- + PR c++/16681
- + * init.c (build_zero_init): Build a RANGE_EXPR for an array
- + initializer.
- +
- 2004-09-30 Release Manager
-
- * GCC 3.3.5 Released.
- Index: gcc/cp/cvt.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/cp/cvt.c,v
- retrieving revision 1.126.2.4
- retrieving revision 1.126.2.5
- diff -u -r1.126.2.4 -r1.126.2.5
- --- gcc/gcc/cp/cvt.c 23 Feb 2004 12:50:50 -0000 1.126.2.4
- +++ gcc/gcc/cp/cvt.c 18 Dec 2004 20:26:10 -0000 1.126.2.5
- @@ -903,6 +903,7 @@
- of an overloaded function, and this is not one of them. */
- pedwarn ("%s cannot resolve address of overloaded function",
- implicit ? implicit : "void cast");
- + expr = void_zero_node;
- }
- else if (implicit && probe == expr && is_overloaded_fn (probe))
- /* Only warn when there is no &. */
- Index: gcc/cp/error.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/cp/error.c,v
- retrieving revision 1.192.2.9
- retrieving revision 1.192.2.11
- diff -u -r1.192.2.9 -r1.192.2.11
- --- gcc/gcc/cp/error.c 24 Jul 2004 13:03:23 -0000 1.192.2.9
- +++ gcc/gcc/cp/error.c 15 Dec 2004 16:45:23 -0000 1.192.2.11
- @@ -1724,6 +1724,7 @@
- case CEIL_DIV_EXPR:
- case FLOOR_DIV_EXPR:
- case ROUND_DIV_EXPR:
- + case RDIV_EXPR:
- dump_binary_op ("/", t, flags);
- break;
-
- @@ -2070,7 +2071,7 @@
- break;
-
- case BASELINK:
- - print_tree_identifier (scratch_buffer, DECL_NAME (get_first_fn (t)));
- + dump_expr (get_first_fn (t), flags & ~TFF_EXPR_IN_PARENS);
- break;
-
- case TREE_LIST:
- Index: gcc/cp/init.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/cp/init.c,v
- retrieving revision 1.299.2.18
- retrieving revision 1.299.2.19
- diff -u -r1.299.2.18 -r1.299.2.19
- --- gcc/gcc/cp/init.c 28 Jul 2004 02:17:28 -0000 1.299.2.18
- +++ gcc/gcc/cp/init.c 9 Dec 2004 15:09:19 -0000 1.299.2.19
- @@ -235,7 +235,6 @@
- }
- else if (TREE_CODE (type) == ARRAY_TYPE)
- {
- - tree index;
- tree max_index;
- tree inits;
-
- @@ -249,15 +248,17 @@
- /* A zero-sized array, which is accepted as an extension, will
- have an upper bound of -1. */
- if (!tree_int_cst_equal (max_index, integer_minus_one_node))
- - for (index = size_zero_node;
- - !tree_int_cst_lt (max_index, index);
- - index = size_binop (PLUS_EXPR, index, size_one_node))
- - inits = tree_cons (index,
- - build_zero_init (TREE_TYPE (type),
- - /*nelts=*/NULL_TREE,
- - static_storage_p),
- - inits);
- - CONSTRUCTOR_ELTS (init) = nreverse (inits);
- + {
- + tree elt_init = build_zero_init (TREE_TYPE (type),
- + /*nelts=*/NULL_TREE,
- + static_storage_p);
- + tree range = build (RANGE_EXPR,
- + sizetype, size_zero_node, max_index);
- +
- + inits = tree_cons (range, elt_init, inits);
- + }
- +
- + CONSTRUCTOR_ELTS (init) = nreverse (inits);
- }
- else if (TREE_CODE (type) == REFERENCE_TYPE)
- ;
- Index: gcc/doc/install.texi
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/doc/install.texi,v
- retrieving revision 1.151.2.53
- retrieving revision 1.151.2.56
- diff -u -r1.151.2.53 -r1.151.2.56
- --- gcc/gcc/doc/install.texi 8 May 2004 17:37:31 -0000 1.151.2.53
- +++ gcc/gcc/doc/install.texi 14 Oct 2004 12:31:38 -0000 1.151.2.56
- @@ -3098,8 +3098,19 @@
- @file{/usr/bin} before @file{/usr/xpg4/bin} for the duration of the build.
-
- All releases of GNU binutils prior to 2.11.2 have known bugs on this
- -platform. We recommend the use of GNU binutils 2.11.2 or the vendor
- -tools (Sun @command{as}, Sun @command{ld}).
- +platform. We recommend the use of GNU binutils 2.11.2 or later, or the
- +vendor tools (Sun @command{as}, Sun @command{ld}). Note that your mileage
- +may vary if you use a combination of the GNU tools and the Sun tools: while
- +the combination GNU @command{as} + Sun @command{ld} should reasonably work,
- +the reverse combination Sun @command{as} + GNU @command{ld} is known to
- +cause memory corruption at runtime in some cases for C++ programs.
- +
- +The stock GNU binutils 2.15 release is broken on this platform because of a
- +single bug. It has been fixed on the 2.15 branch in the CVS repository.
- +You can obtain a working version by checking out the binutils-2_15-branch
- +from the CVS repository or applying the patch
- +@uref{http://sources.redhat.com/ml/binutils-cvs/2004-09/msg00036.html} to the
- +release.
-
- Sun bug 4296832 turns up when compiling X11 headers with GCC 2.95 or
- newer: @command{g++} will complain that types are missing. These headers assume
- @@ -3115,6 +3126,17 @@
- 108377-20 for Intel), and Solaris 8 (108652-24 or newer for SPARC,
- 108653-22 for Intel) that fix this bug.
-
- +Sun bug 4927647 sometimes causes random spurious testsuite failures
- +related to missing diagnostic output. This bug doesn't affect GCC
- +itself, rather it is a kernel bug triggered by the @command{expect}
- +program which is used only by the GCC testsuite driver. When the bug
- +causes the @command{expect} program to miss anticipated output, extra
- +testsuite failures appear.
- +
- +There are patches for Solaris 8 (117350-12 or newer for SPARC,
- +117351-12 or newer for Intel) and Solaris 9 (117171-11 or newer for
- +SPARC, 117172-11 or newer for Intel) that address this problem.
- +
- @html
- <hr />
- @end html
- Index: gcc/doc/tm.texi
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/doc/tm.texi,v
- retrieving revision 1.182.2.8
- retrieving revision 1.182.2.9
- diff -u -r1.182.2.8 -r1.182.2.9
- --- gcc/gcc/doc/tm.texi 5 Mar 2004 17:55:57 -0000 1.182.2.8
- +++ gcc/gcc/doc/tm.texi 14 Oct 2004 06:54:32 -0000 1.182.2.9
- @@ -4160,7 +4160,7 @@
- @end table
-
- @findex TARGET_ASM_OUTPUT_MI_THUNK
- -@deftypefn {Target Hook} void TARGET_ASM_OUTPUT_MI_THUNK (FILE *@var{file}, tree @var{thunk_fndecl}, HOST_WIDE_INT @var{delta}, tree @var{function})
- +@deftypefn {Target Hook} void TARGET_ASM_OUTPUT_MI_THUNK (FILE *@var{file}, tree @var{thunk_fndecl}, HOST_WIDE_INT @var{delta}, HOST_WIDE_INT @var{vcall_offset}, tree @var{function})
- A function that outputs the assembler code for a thunk
- function, used to implement C++ virtual function calls with multiple
- inheritance. The thunk acts as a wrapper around a virtual function,
- @@ -4174,7 +4174,15 @@
- e.g.@: @samp{%o0} on a sparc. The addition must preserve the values of
- all other incoming arguments.
-
- -After the addition, emit code to jump to @var{function}, which is a
- +Then, if @var{vcall_offset} is nonzero, an additional adjustment should be
- +made after adding @code{delta}. In particular, if @var{p} is the
- +adjusted pointer, the following adjustment should be made:
- +
- +@smallexample
- +p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]
- +@end smallexample
- +
- +After the additions, emit code to jump to @var{function}, which is a
- @code{FUNCTION_DECL}. This is a direct pure jump, not a call, and does
- not touch the return address. Hence returning from @var{FUNCTION} will
- return to whoever called the current @samp{thunk}.
- @@ -4194,21 +4202,13 @@
- not support varargs.
- @end deftypefn
-
- -@findex TARGET_ASM_OUTPUT_MI_VCALL_THUNK
- -@deftypefn {Target Hook} void TARGET_ASM_OUTPUT_MI_VCALL_THUNK (FILE *@var{file}, tree @var{thunk_fndecl}, HOST_WIDE_INT @var{delta}, int @var{vcall_offset}, tree @var{function})
- -A function like @code{TARGET_ASM_OUTPUT_MI_THUNK}, except that if
- -@var{vcall_offset} is nonzero, an additional adjustment should be made
- -after adding @code{delta}. In particular, if @var{p} is the
- -adjusted pointer, the following adjustment should be made:
- -
- -@example
- -p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]
- -@end example
- -
- -@noindent
- -If this function is defined, it will always be used in place of
- -@code{TARGET_ASM_OUTPUT_MI_THUNK}.
- -
- +@findex TARGET_ASM_CAN_OUTPUT_MI_THUNK
- +@deftypefn {Target Hook} bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (tree @var{thunk_fndecl}, HOST_WIDE_INT @var{delta}, HOST_WIDE_INT @var{vcall_offset}, tree @var{function})
- +A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would be able
- +to output the assembler code for the thunk function specified by the
- +arguments it is passed, and false otherwise. In the latter case, the
- +generic approach will be used by the C++ front end, with the limitations
- +previously exposed.
- @end deftypefn
-
- @node Profiling
- Index: gcc/testsuite/ChangeLog
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/testsuite/ChangeLog,v
- retrieving revision 1.2261.2.384
- retrieving revision 1.2261.2.398
- diff -u -r1.2261.2.384 -r1.2261.2.398
- --- gcc/gcc/testsuite/ChangeLog 30 Sep 2004 16:45:41 -0000 1.2261.2.384
- +++ gcc/gcc/testsuite/ChangeLog 23 Jan 2005 05:16:05 -0000 1.2261.2.398
- @@ -1,3 +1,78 @@
- +2005-01-22 Roger Sayle <roger@eyesopen.com>
- +
- + PR target/18402
- + Backport from mainline
- + 2003-02-05 Jakub Jelinek <jakub@redhat.com>
- +
- + PR optimization/8555
- + * gcc.dg/20030204-1.c: New test.
- +
- +2005-01-21 Giovanni Bajo <giovannibajo@gcc.gnu.org>
- +
- + PR c++/17115
- + * g++.dg/warn/Winline-4.C: New test.
- +
- +2005-01-18 Eric Botcazou <ebotcazou@libertysurf.fr>
- +
- + * gcc.dg/short-compare-1.c: New test.
- + * gcc.dg/short-compare-2.c: Likewise.
- +
- +2005-01-03 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
- +
- + Backport:
- + 2003-10-13 Geoffrey Keating <geoffk@apple.com>
- +
- + * gcc.dg/asm-names.c: Use scan-assembler-not rather
- + than linker trickery.
- +
- +2005-01-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
- +
- + * gcc.c-torture/execute/20020720-1.x: XFAIL for x86 when using
- + -fpic or -fPIC.
- +
- +2004-12-21 Joseph S. Myers <jsm@polyomino.org.uk>
- +
- + PR c/14765
- + * gcc.dg/pr14765-1.c: New test.
- +
- +2004-12-20 Andrew Pinski <pinskia@physics.uc.edu>
- +
- + PR other/19093
- + * g++.dg/opt/max1.C: Fix for 64bit targets.
- +
- +2004-12-19 Roger Sayle <roger@eyesopen.com>
- +
- + PR middle-end/19068
- + * g++.dg/opt/max1.C: New test case.
- +
- +2004-12-16 Wolfgang Bangerth <bangerth@dealii.com>
- +
- + * g++.dg/other/complex1.C: New test.
- +
- +2004-12-10 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
- +
- + PR rtl-optimization/16536
- + * gcc.c-torture/execute/restrict-1.c: New test.
- +
- +2004-12-09 Nathan Sidwell <nathan@codesourcery.com>
- +
- + PR c++/16681
- + * g++.dg/init/array15.C: New.
- + * g++.dg/init/array16.C: New.
- +
- +2004-11-29 Roger Sayle <roger@eyesopen.com>
- +
- + PR rtl-optimization/9771
- + * gcc.dg/pr9771-1.c: New test case.
- +
- +2004-11-27 Falk Hueffner <falk@debian.org>
- +
- + * gcc.dg/loop-6.c: New test.
- +
- +2004-10-13 Eric Botcazou <ebotcazou@libertysurf.fr>
- +
- + * g++.dg/inherit/thunk1.C: Run on the SPARC.
- +
- 2004-09-30 Release Manager
-
- * GCC 3.3.5 Released.
- Index: gcc/testsuite/g++.dg/inherit/thunk1.C
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/testsuite/g++.dg/inherit/thunk1.C,v
- retrieving revision 1.5
- retrieving revision 1.5.12.1
- diff -u -r1.5 -r1.5.12.1
- --- gcc/gcc/testsuite/g++.dg/inherit/thunk1.C 24 Oct 2002 09:16:36 -0000 1.5
- +++ gcc/gcc/testsuite/g++.dg/inherit/thunk1.C 14 Oct 2004 06:54:49 -0000 1.5.12.1
- @@ -1,4 +1,4 @@
- -// { dg-do run { target i?86-*-* x86_64-*-* s390*-*-* alpha*-*-* ia64-*-* } }
- +// { dg-do run { target i?86-*-* x86_64-*-* s390*-*-* alpha*-*-* ia64-*-* sparc*-*-* } }
-
- #include <stdarg.h>
-
- Index: gcc/testsuite/g++.dg/init/array15.C
- ===================================================================
- RCS file: gcc/testsuite/g++.dg/init/array15.C
- diff -N gcc/testsuite/g++.dg/init/array15.C
- --- gcc//dev/null 1 Jan 1970 00:00:00 -0000
- +++ gcc/gcc/testsuite/g++.dg/init/array15.C 9 Dec 2004 15:09:32 -0000 1.1.6.1
- @@ -0,0 +1,46 @@
- +// { dg-do run }
- +
- +// Copyright (C) 2004 Free Software Foundation, Inc.
- +// Contributed by Nathan Sidwell 8 Dec 2004 <nathan@codesourcery.com>
- +
- +// PR 16681 too much memory used
- +// Origin: Matt LaFary <lafary@activmedia.com>
- +
- +struct foo {
- + unsigned char buffer[4111222];
- + foo() ;
- + bool check () const;
- +};
- +
- +foo::foo ()
- + : buffer()
- +{}
- +
- +bool foo::check () const
- +{
- + for (unsigned ix = sizeof (buffer); ix--;)
- + if (buffer[ix])
- + return false;
- + return true;
- +}
- +
- +void *operator new (__SIZE_TYPE__ size, void *p)
- +{
- + return p;
- +}
- +
- +char heap[5000000];
- +
- +int main ()
- +{
- + for (unsigned ix = sizeof (heap); ix--;)
- + heap[ix] = ix;
- +
- + foo *f = new (heap) foo ();
- +
- + if (!f->check ())
- + return 1;
- + return 0;
- +}
- +
- +
- Index: gcc/testsuite/g++.dg/init/array16.C
- ===================================================================
- RCS file: gcc/testsuite/g++.dg/init/array16.C
- diff -N gcc/testsuite/g++.dg/init/array16.C
- --- gcc//dev/null 1 Jan 1970 00:00:00 -0000
- +++ gcc/gcc/testsuite/g++.dg/init/array16.C 9 Dec 2004 15:09:32 -0000 1.1.6.1
- @@ -0,0 +1,106 @@
- +// { dg-do run }
- +
- +// Copyright (C) 2004 Free Software Foundation, Inc.
- +// Contributed by Nathan Sidwell 8 Dec 2004 <nathan@codesourcery.com>
- +
- +// PR 16681 too much memory used
- +// Origin: Matt LaFary <lafary@activmedia.com>
- +
- +
- +struct elt
- +{
- + static int count;
- + static elt*ptr;
- + static int abort;
- + char c;
- +
- + elt ();
- + ~elt ();
- +
- +};
- +
- +int elt::count;
- +elt *elt::ptr;
- +int elt::abort;
- +
- +elt::elt ()
- + :c ()
- +{
- + if (count >= 0)
- + {
- + if (!ptr)
- + ptr = this;
- + if (count == 100)
- + throw 2;
- + if (this != ptr)
- + abort = 1;
- + count++;
- + ptr++;
- + }
- +}
- +
- +elt::~elt ()
- +{
- + if (count >= 0)
- + {
- + ptr--;
- + count--;
- + if (ptr != this)
- + abort = 2;
- + }
- +}
- +
- +struct foo {
- + elt buffer[4111222];
- + foo() ;
- + bool check () const;
- +};
- +
- +foo::foo ()
- + : buffer()
- +{}
- +
- +bool foo::check () const
- +{
- + for (unsigned ix = sizeof (buffer)/ sizeof (buffer[0]); ix--;)
- + if (buffer[ix].c)
- + return false;
- + return true;
- +}
- +
- +void *operator new (__SIZE_TYPE__ size, void *p)
- +{
- + return p;
- +}
- +
- +char heap[5000000];
- +
- +int main ()
- +{
- + for (unsigned ix = sizeof (heap); ix--;)
- + heap[ix] = ix;
- +
- + try
- + {
- + foo *f = new (heap) foo ();
- + return 1;
- + }
- + catch (...)
- + {
- + if (elt::count)
- + return 2;
- + if (elt::abort)
- + return elt::abort + 3;
- + }
- +
- + for (unsigned ix = sizeof (heap); ix--;)
- + heap[ix] = ix;
- +
- + elt::count = -1;
- + foo *f = new (heap) foo ();
- + if (!f->check ())
- + return 3;
- + return 0;
- +}
- +
- +
- Index: gcc/testsuite/g++.dg/opt/max1.C
- ===================================================================
- RCS file: gcc/testsuite/g++.dg/opt/max1.C
- diff -N gcc/testsuite/g++.dg/opt/max1.C
- --- gcc//dev/null 1 Jan 1970 00:00:00 -0000
- +++ gcc/gcc/testsuite/g++.dg/opt/max1.C 20 Dec 2004 21:12:34 -0000 1.2.2.2
- @@ -0,0 +1,29 @@
- +/* PR middle-end/19068 */
- +/* Test case by Andrew Pinski <pinskia@physics.uc.edu> */
- +/* { dg-do run } */
- +/* { dg-options "-O2" } */
- +
- +extern "C" void abort (void);
- +
- +long fff[10];
- +
- +void f(long a)
- +{
- + int i;
- + a = *((long*)(a+1+sizeof(long))) >? *((long*)(a+1));
- +
- + for(i=0;i<10;i++)
- + fff[i] = a;
- +}
- +
- +int main(void)
- +{
- + int i;
- + long a[2] = {10,5};
- + f((long)(&a)-1);
- + for(i = 0;i<10;i++)
- + if (fff[i]!=10)
- + abort ();
- + return 0;
- +}
- +
- Index: gcc/testsuite/g++.dg/other/complex1.C
- ===================================================================
- RCS file: gcc/testsuite/g++.dg/other/complex1.C
- diff -N gcc/testsuite/g++.dg/other/complex1.C
- --- gcc//dev/null 1 Jan 1970 00:00:00 -0000
- +++ gcc/gcc/testsuite/g++.dg/other/complex1.C 16 Dec 2004 14:04:52 -0000 1.1.4.1
- @@ -0,0 +1,28 @@
- +// PR middle-end/18882
- +// Origin: Petr Mikulik <mikulik@physics.muni.cz>
- +// Testcase by Wolfgang Bangerth <bangerth@dealii.com>
- +
- +// { dg-do run }
- +// { dg-options "" }
- +
- +extern "C" void abort ();
- +
- +struct C {
- + __complex__ long double c;
- +};
- +
- +void foo()
- +{
- + C x = {2+2i};
- +
- + int n = 1;
- + C y = (n==1) ? x : (C){3+3i};
- + if (__imag__ y.c != 2)
- + abort ();
- +}
- +
- +int main(void)
- +{
- + foo ();
- + return 0;
- +}
- Index: gcc/testsuite/g++.dg/warn/Winline-4.C
- ===================================================================
- RCS file: gcc/testsuite/g++.dg/warn/Winline-4.C
- diff -N gcc/testsuite/g++.dg/warn/Winline-4.C
- --- gcc//dev/null 1 Jan 1970 00:00:00 -0000
- +++ gcc/gcc/testsuite/g++.dg/warn/Winline-4.C 21 Jan 2005 10:02:30 -0000 1.1.42.1
- @@ -0,0 +1,17 @@
- +// { dg-do compile }
- +// { dg-options "-O2 -Winline" }
- +// Origin: <markus at oberhumer dot com>
- +// PR 17115: We should not emit -Winline warning for functions marked with
- +// noinline
- +
- +struct Foo {
- + __attribute__((noinline)) int a(int r) { return r & 1; }
- + virtual __attribute__((noinline)) int b(int r) { return r & 1; }
- + static __attribute__((noinline)) int c(int r) { return r & 1; }
- +};
- +
- +int bar(int r) {
- + Foo f;
- + int k = 1; k &= f.a(r); k &= f.b(r); k &= f.a(r);
- + return k;
- +}
- Index: gcc/testsuite/gcc.c-torture/execute/20020720-1.x
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.c-torture/execute/20020720-1.x,v
- retrieving revision 1.8.6.2
- retrieving revision 1.8.6.3
- diff -u -r1.8.6.2 -r1.8.6.3
- --- gcc/gcc/testsuite/gcc.c-torture/execute/20020720-1.x 8 Mar 2003 14:34:06 -0000 1.8.6.2
- +++ gcc/gcc/testsuite/gcc.c-torture/execute/20020720-1.x 3 Jan 2005 01:43:45 -0000 1.8.6.3
- @@ -11,6 +11,19 @@
- # and can make the optimization.
-
- # Don't XFAIL at -O0, that should never fail.
- +if { [istarget "i?86-*-*"] } {
- + set torture_eval_before_compile {
- + global compiler_conditional_xfail_data
- + set compiler_conditional_xfail_data {
- + "PR opt/10348" \
- + { "*-*-*" } \
- + { "-fpic" "-fPIC" } \
- + { "-O0" }
- + }
- + }
- + return 0
- +}
- +
- set torture_eval_before_compile {
- global compiler_conditional_xfail_data
- set compiler_conditional_xfail_data {
- Index: gcc/testsuite/gcc.c-torture/execute/restrict-1.c
- ===================================================================
- RCS file: gcc/testsuite/gcc.c-torture/execute/restrict-1.c
- diff -N gcc/testsuite/gcc.c-torture/execute/restrict-1.c
- --- gcc//dev/null 1 Jan 1970 00:00:00 -0000
- +++ gcc/gcc/testsuite/gcc.c-torture/execute/restrict-1.c 10 Dec 2004 17:25:07 -0000 1.2.44.1
- @@ -0,0 +1,30 @@
- +/* PR rtl-optimization/16536
- + Origin: Jeremy Denise <jeremy.denise@libertysurf.fr>
- + Reduced: Wolfgang Bangerth <bangerth@dealii.org>
- + Volker Reichelt <reichelt@igpm.rwth-aachen.de> */
- +
- +extern void abort ();
- +
- +typedef struct
- +{
- + int i, dummy;
- +} A;
- +
- +inline A foo (const A* p, const A* q)
- +{
- + return (A){p->i+q->i};
- +}
- +
- +void bar (A* __restrict__ p)
- +{
- + *p=foo(p,p);
- + if (p->i!=2)
- + abort();
- +}
- +
- +int main ()
- +{
- + A a={1};
- + bar(&a);
- + return 0;
- +}
- Index: gcc/testsuite/gcc.dg/20030204-1.c
- ===================================================================
- RCS file: gcc/testsuite/gcc.dg/20030204-1.c
- diff -N gcc/testsuite/gcc.dg/20030204-1.c
- --- gcc//dev/null 1 Jan 1970 00:00:00 -0000
- +++ gcc/gcc/testsuite/gcc.dg/20030204-1.c 23 Jan 2005 05:16:14 -0000 1.3.6.1
- @@ -0,0 +1,16 @@
- +/* PR optimization/8555 */
- +/* { dg-do compile } */
- +/* { dg-options "-O -ffast-math -funroll-loops" } */
- +/* { dg-options "-march=pentium3 -O -ffast-math -funroll-loops" { target i?86-*-* } } */
- +
- +float foo (float *a, int i)
- +{
- + int j;
- + float x = a[j = i - 1], y;
- +
- + for (j = i; --j >= 0; )
- + if ((y = a[j]) > x)
- + x = y;
- +
- + return x;
- +}
- Index: gcc/testsuite/gcc.dg/asm-names.c
- ===================================================================
- RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/asm-names.c,v
- retrieving revision 1.2
- retrieving revision 1.2.44.1
- diff -u -r1.2 -r1.2.44.1
- --- gcc/gcc/testsuite/gcc.dg/asm-names.c 27 Aug 2001 19:23:11 -0000 1.2
- +++ gcc/gcc/testsuite/gcc.dg/asm-names.c 4 Jan 2005 00:20:35 -0000 1.2.44.1
- @@ -2,26 +2,15 @@
- to have an underscore prefixed, even if normal symbols are.
- Problem reported by Krister Walfridsson <cato@df.lth.se>. */
-
- -/* { dg-do link } */
- +/* { dg-do compile } */
- /* { dg-options "-fleading-underscore" } */
- +/* { dg-final { scan-assembler-not "____frob14" } } */
-
- extern void frobnicate (void) asm ("___frob14"); /* three underscores */
-
- -void __frob14 (void) {} /* two underscores */
- -
- int
- main (void)
- {
- frobnicate ();
- return 0;
- }
- -
- -/* In case built where the runtime expects no leading underscore on
- - main(). */
- -extern int xmain (void) asm ("main");
- -
- -int xmain (void) { return main(); }
- -
- -/* In case built where the runtime calls __main. */
- -extern int ymain (void) asm ("___main");
- -int ymain (void) { return main(); }
- Index: gcc/testsuite/gcc.dg/loop-6.c
- ===================================================================
- RCS file: gcc/testsuite/gcc.dg/loop-6.c
- diff -N gcc/testsuite/gcc.dg/loop-6.c
- --- gcc//dev/null 1 Jan 1970 00:00:00 -0000
- +++ gcc/gcc/testsuite/gcc.dg/loop-6.c 27 Nov 2004 16:59:16 -0000 1.1.4.1
- @@ -0,0 +1,25 @@
- +/* PR optimization/18577 */
- +/* Origin: Falk Hueffner <falk@debian.org> */
- +
- +/* { dg-do run } */
- +/* { dg-options "-O2 -funroll-all-loops" } */
- +
- +static float tfcos12[3];
- +__attribute__((noinline)) double f(double x) { return x; }
- +int g;
- +
- +int main(void)
- +{
- + int i, j;
- + for (i = 0; i < 1; i++)
- + tfcos12[i] = 0.5;
- +
- + for (i = 0; i < 1; i++)
- + {
- + tfcos12[i] = 0.5 * f(i);
- + for (j = 0; j < 12; j++)
- + g++;
- + }
- +
- + return 0;
- +}
- Index: gcc/testsuite/gcc.dg/pr14765-1.c
- ===================================================================
- RCS file: gcc/testsuite/gcc.dg/pr14765-1.c
- diff -N gcc/testsuite/gcc.dg/pr14765-1.c
- --- gcc//dev/null 1 Jan 1970 00:00:00 -0000
- +++ gcc/gcc/testsuite/gcc.dg/pr14765-1.c 21 Dec 2004 21:51:29 -0000 1.1.48.1
- @@ -0,0 +1,11 @@
- +/* Empty statement expressions should get void type. Bug 14765 from
- + Serge Belyshev <belyshev@lubercy.com>. */
- +/* { dg-do compile } */
- +/* { dg-options "" } */
- +
- +int a;
- +void fun ()
- +{
- + a = 0;
- + a = ({}); /* { dg-error "not ignored" "void stmt expr" } */
- +}
- Index: gcc/testsuite/gcc.dg/pr9771-1.c
- ===================================================================
- RCS file: gcc/testsuite/gcc.dg/pr9771-1.c
- diff -N gcc/testsuite/gcc.dg/pr9771-1.c
- --- gcc//dev/null 1 Jan 1970 00:00:00 -0000
- +++ gcc/gcc/testsuite/gcc.dg/pr9771-1.c 30 Nov 2004 04:34:21 -0000 1.1.44.1
- @@ -0,0 +1,43 @@
- +/* PR rtl-optimization/9771 */
- +/* { dg-do run { target i?86-*-* } } */
- +/* { dg-options "-O2 -fomit-frame-pointer -ffixed-ebp" } */
- +
- +extern void abort(void);
- +extern void exit(int);
- +
- +register long *B asm ("ebp");
- +
- +long x = 10;
- +long y = 20;
- +
- +void bar(void)
- +{
- + B = &y;
- +}
- +
- +void foo()
- +{
- + long *adr = B;
- + long save = *adr;
- +
- + *adr = 123;
- +
- + bar();
- +
- + *adr = save;
- +}
- +
- +int main()
- +{
- + B = &x;
- +
- + foo();
- +
- + if (x != 10 || y != 20)
- + abort();
- +
- + /* We can't return, as our caller may assume %ebp is preserved! */
- + /* We could save/restore it (like foo), but its easier to exit. */
- + exit(0);
- +}
- +
- Index: gcc/testsuite/gcc.dg/short-compare-1.c
- ===================================================================
- RCS file: gcc/testsuite/gcc.dg/short-compare-1.c
- diff -N gcc/testsuite/gcc.dg/short-compare-1.c
- --- gcc//dev/null 1 Jan 1970 00:00:00 -0000
- +++ gcc/gcc/testsuite/gcc.dg/short-compare-1.c 18 Jan 2005 08:39:29 -0000 1.1.4.1
- @@ -0,0 +1,21 @@
- +/* PR rtl-optimization/19296 */
- +/* Origin: Falk Hueffner <falk@debian.org> */
- +
- +/* { dg-do run } */
- +/* { dg-options "-O" } */
- +/* { dg-options "-O -mcpu=i686" { target i?86-*-* } } */
- +/* { dg-options "-O -m32 -mcpu=i686" { target x86_64-*-* } } */
- +
- +extern void abort(void);
- +
- +void f(unsigned short ad)
- +{
- + if (ad >= 0x4000 && ad < 0xc000)
- + abort();
- +}
- +
- +int main(void)
- +{
- + f(0xff00);
- + return 0;
- +}
- Index: gcc/testsuite/gcc.dg/short-compare-2.c
- ===================================================================
- RCS file: gcc/testsuite/gcc.dg/short-compare-2.c
- diff -N gcc/testsuite/gcc.dg/short-compare-2.c
- --- gcc//dev/null 1 Jan 1970 00:00:00 -0000
- +++ gcc/gcc/testsuite/gcc.dg/short-compare-2.c 18 Jan 2005 08:39:29 -0000 1.1.4.1
- @@ -0,0 +1,22 @@
- +/* PR rtl-optimization/19296 */
- +/* Origin: Falk Hueffner <falk@debian.org> */
- +/* Testcase by Andrew Pinski <pinskia@gcc.gnu.org> */
- +
- +/* { dg-do run } */
- +/* { dg-options "-O" } */
- +/* { dg-options "-O -mcpu=i686" { target i?86-*-* } } */
- +/* { dg-options "-O -m32 -mcpu=i686" { target x86_64-*-* } } */
- +
- +extern void abort();
- +
- +void f(unsigned short ad)
- +{
- + if ((short) (ad - 0x4000) >= 0)
- + abort();
- +}
- +
- +int main(void)
- +{
- + f(0xc000);
- + return 0;
- +}
- Index: libstdc++-v3/ChangeLog
- ===================================================================
- RCS file: /cvs/gcc/gcc/libstdc++-v3/ChangeLog,v
- retrieving revision 1.1464.2.192
- retrieving revision 1.1464.2.195
- diff -u -r1.1464.2.192 -r1.1464.2.195
- --- gcc/libstdc++-v3/ChangeLog 30 Sep 2004 16:47:23 -0000 1.1464.2.192
- +++ gcc/libstdc++-v3/ChangeLog 21 Jan 2005 23:52:45 -0000 1.1464.2.195
- @@ -1,3 +1,18 @@
- +2005-01-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
- +
- + PR libstdc++/19510
- + * include/bits/stl_list.h (_List_iterator_base): Initialize _M_node
- + in constructor.
- + (_List_iterator): Initialize _List_iterator_base in constructor.
- + * include/bits/stl_tree.h (_Rb_tree_iterator): Initialize _M_node
- + in constructor.
- +
- +2004-12-03 Richard Henderson <rth@redhat.com>
- +
- + PR 17856
- + * config/cpu/i486/atomicity.h (__exchange_and_add, __atomic_add):
- + Split in-out memory constraints.
- +
- 2004-09-30 Release Manager
-
- * GCC 3.3.5 Released.
- Index: libstdc++-v3/config/cpu/i486/atomicity.h
- ===================================================================
- RCS file: /cvs/gcc/gcc/libstdc++-v3/config/cpu/i486/atomicity.h,v
- retrieving revision 1.1.22.1
- retrieving revision 1.1.22.2
- diff -u -r1.1.22.1 -r1.1.22.2
- --- gcc/libstdc++-v3/config/cpu/i486/atomicity.h 2 Jun 2003 18:48:52 -0000 1.1.22.1
- +++ gcc/libstdc++-v3/config/cpu/i486/atomicity.h 3 Dec 2004 23:44:07 -0000 1.1.22.2
- @@ -1,6 +1,6 @@
- // Low-level functions for atomic operations: x86, x >= 4 version -*- C++ -*-
-
- -// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
- +// Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
- //
- // This file is part of the GNU ISO C++ Library. This library is free
- // software; you can redistribute it and/or modify it under the
- @@ -38,8 +38,8 @@
- {
- register _Atomic_word __result;
- __asm__ __volatile__ ("lock; xadd{l} {%0,%1|%1,%0}"
- - : "=r" (__result), "+m" (*__mem)
- - : "0" (__val)
- + : "=r" (__result), "=m" (*__mem)
- + : "0" (__val), "m"(*__mem)
- : "memory");
- return __result;
- }
- @@ -49,7 +49,9 @@
- __atomic_add (volatile _Atomic_word* __mem, int __val)
- {
- __asm__ __volatile__ ("lock; add{l} {%1,%0|%0,%1}"
- - : "+m" (*__mem) : "ir" (__val) : "memory");
- + : "=m" (*__mem)
- + : "ir" (__val), "m"(*__mem)
- + : "memory");
- }
-
- #endif /* atomicity.h */
- Index: libstdc++-v3/include/bits/c++config
- ===================================================================
- RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/c++config,v
- retrieving revision 1.574.2.657
- retrieving revision 1.574.2.779
- diff -u -r1.574.2.657 -r1.574.2.779
- --- gcc/libstdc++-v3/include/bits/c++config 30 Sep 2004 00:16:09 -0000 1.574.2.657
- +++ gcc/libstdc++-v3/include/bits/c++config 30 Jan 2005 00:16:14 -0000 1.574.2.779
- @@ -35,7 +35,7 @@
- #include <bits/os_defines.h>
-
- // The current version of the C++ library in compressed ISO date format.
- -#define __GLIBCPP__ 20040930
- +#define __GLIBCPP__ 20050130
-
- // This is necessary until GCC supports separate template compilation.
- #define _GLIBCPP_NO_TEMPLATE_EXPORT 1
- Index: libstdc++-v3/include/bits/stl_list.h
- ===================================================================
- RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/stl_list.h,v
- retrieving revision 1.20
- retrieving revision 1.20.8.1
- diff -u -r1.20 -r1.20.8.1
- --- gcc/libstdc++-v3/include/bits/stl_list.h 10 Sep 2002 23:19:10 -0000 1.20
- +++ gcc/libstdc++-v3/include/bits/stl_list.h 21 Jan 2005 23:52:48 -0000 1.20.8.1
- @@ -1,6 +1,6 @@
- // List implementation -*- C++ -*-
-
- -// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- +// Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
- //
- // This file is part of the GNU ISO C++ Library. This library is free
- // software; you can redistribute it and/or modify it under the
- @@ -108,6 +108,7 @@
- { }
-
- _List_iterator_base()
- + : _M_node()
- { }
-
- /// Walk the %list forward.
- @@ -156,6 +157,7 @@
- { }
-
- _List_iterator()
- + : _List_iterator_base()
- { }
-
- _List_iterator(const iterator& __x)
- Index: libstdc++-v3/include/bits/stl_tree.h
- ===================================================================
- RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/stl_tree.h,v
- retrieving revision 1.17
- retrieving revision 1.17.2.1
- diff -u -r1.17 -r1.17.2.1
- --- gcc/libstdc++-v3/include/bits/stl_tree.h 22 Nov 2002 18:53:53 -0000 1.17
- +++ gcc/libstdc++-v3/include/bits/stl_tree.h 21 Jan 2005 23:52:49 -0000 1.17.2.1
- @@ -1,6 +1,6 @@
- // RB tree implementation -*- C++ -*-
-
- -// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- +// Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
- //
- // This file is part of the GNU ISO C++ Library. This library is free
- // software; you can redistribute it and/or modify it under the
- @@ -191,7 +191,7 @@
- typedef _Rb_tree_iterator<_Val, _Ref, _Ptr> _Self;
- typedef _Rb_tree_node<_Val>* _Link_type;
-
- - _Rb_tree_iterator() {}
- + _Rb_tree_iterator() { _M_node = 0; }
- _Rb_tree_iterator(_Link_type __x) { _M_node = __x; }
- _Rb_tree_iterator(const iterator& __it) { _M_node = __it._M_node; }
-
|