Útgáfa af GCC 12 þýðandasvítunni

Eftir árs þróun hefur ókeypis þýðandasvítan GCC 12.1 verið gefin út, fyrsta mikilvæga útgáfan í nýju GCC 12.x útibúinu. Í samræmi við nýja útgáfunúmerakerfið var útgáfa 12.0 notuð í þróunarferlinu, og skömmu fyrir útgáfu GCC 12.1 hafði GCC 13.0 útibúið þegar tekið þátt, á grundvelli þess myndi næsta stóra útgáfa, GCC 13.1, myndast. Þann 23. maí mun verkefnið fagna því að 35 ár eru liðin frá stofnun fyrstu útgáfu GCC.

Helstu breytingar:

  • Bætti við stuðningi við CTF (Compact Type Format) villuleitarsniðið, sem veitir þétta geymslu á upplýsingum um C-gerðir, tengingar á milli aðgerða og villuleitartákn. Þegar það er fellt inn í ELF hluti, gerir sniðið kleift að nota EFL stafatöflur til að forðast tvíverknað gagna.
  • Stuðningur við „STABS“ villuleitarupplýsingageymslusniðið, búið til á níunda áratugnum, hefur verið úreltur.
  • Vinna heldur áfram að auka stuðning við framtíðar C2X og C++23 staðla fyrir C og C++ tungumálin. Til dæmis, stuðningi við „ef consteval“ tjáningu hefur verið bætt við; leyft að nota sjálfvirkt í fallabreytum ("f(auto(g()))"); notkun á óbókstaflegum breytum, goto og merkjum er leyfð í föllum sem lýst er yfir sem constexpr; bætt við stuðningi við rekstraraðila fjölvíða vísitölu[]; í ef, fyrir og skipta, möguleikar frumstillingarblokka hafa verið stækkaðir ("for (að nota T = int; T e : v)").
  • C++ Standard Library hefur bætt stuðning við tilraunahluta C++20 og C++23 staðlanna. Bætti við stuðningi við std::move_only_function, , std::basic_string::resize_and_overwrite, , og std::invoke_r. Leyft að nota std::unique_ptr, std::vector, std::basic_string, std::valfrjálst og std::variant í constexpr föllum.
  • Fortran framhliðin veitir fullan stuðning fyrir TS 29113 forskriftina, sem lýsir getu til að tryggja færanleika milli Fortran og C kóða.
  • Bætti við stuðningi við __builtin_shufflevector(vec1, vec2, index1, index2, ...) viðbót sem áður var bætt við Clang, sem býður upp á eitt símtal til að framkvæma algengar vektoruppstokkun og uppstokkunaraðgerðir.
  • Þegar "-O2" fínstillingarstigið er notað, er vektorun sjálfkrafa virkjuð (-ftree-vectorize og -fvect-cost-model=mjög-ódýr stillingar eru virkar). Mjög ódýra líkanið leyfir aðeins vigurvæðingu ef vektorkóði getur alveg komið í stað mælikvarðakóðans sem verið er að vektorisera.
  • Bætt við „-ftrivial-auto-var-init“ ham til að gera skýra frumstillingu á breytum á staflanum kleift að fylgjast með vandamálum og loka á veikleika sem tengjast notkun óforstilltra breyta.
  • Fyrir C og C++ tungumál hefur innbyggðri aðgerð __builtin_dynamic_object_size verið bætt við til að ákvarða stærð hlutar, samhæft við svipaða aðgerð frá Clang.
  • Fyrir C og C++ tungumálin hefur stuðningi við „ótiltækan“ eiginleikann verið bætt við (til dæmis geturðu merkt aðgerðir sem munu búa til villu ef þú reynir að nota þær).
  • Fyrir C og C++ tungumál hefur stuðningi við forvinnslutilskipanir „#elifdef“ og „#elifndef“ verið bætt við.
  • Bætt við "-Wbidi-stafi" fána til að sýna viðvörun ef UTF-8 stafir eru rangt notaðir, sem breytir röðinni sem tvíátta texti birtist í.
  • Bætt við "-Warray-compare" fána til að sýna viðvörun þegar reynt er að bera saman tvær operendur sem vísa til fylki.
  • Innleiðing OpenMP 5.0 og 5.1 (Open Multi-Processing) staðlanna, sem skilgreina API og aðferðir til að beita samhliða forritunaraðferðum á fjölkjarna og blendingakerfi (CPU+GPU/DSP) með sameiginlegu minni og vektorgreiningareiningum (SIMD) , hefur haldið áfram.
  • Bætt útfærsla á OpenACC 2.6 samhliða forritunarforskriftinni, sem skilgreinir verkfæri til að afhlaða aðgerðum á GPU og sérhæfðum örgjörvum eins og NVIDIA PTX.
  • Stuðningur við víðtækar leiðbeiningar Intel AVX86-FP512 og _Float16 gerð hefur verið bætt við kóða kynslóðar bakhlið fyrir x16 arkitektúrinn.
  • Fyrir x86 arkitektúrinn hefur verið bætt við vörn gegn veikleikum í örgjörvum sem orsakast af íhugandi framkvæmd á leiðbeiningum eftir skilyrðislausar framstökkaðgerðir. Vandamálið kemur upp vegna forvirkrar vinnslu leiðbeininga strax í kjölfar útibúsleiðbeiningar í minni (SLS, Straight Line Speculation). Til að virkja vernd er „-mharden-sls“ valkosturinn lagður til.
  • Bætti við uppgötvun á notkun óuppstilltra breyta við tilraunastöðugreiningartækið. Bætti við upphafsstuðningi við að greina samsetningarkóða í innfelldum innskotum. Bætt minni mælingar. Kóðinn fyrir vinnslu rofatjáningar hefur verið endurskrifaður.
  • Bætti 30 nýjum símtölum við libgccjit, sameiginlegt bókasafn til að fella kóðarafall inn í önnur ferli og nota það til að JIT safna saman bætikóða í vélkóða.
  • Stuðningur fyrir CO-RE (Compile Once - Run Everywhere) vélbúnaðurinn hefur verið bætt við bakendann til að búa til BPF bætikóða, sem gerir þér kleift að safna saman kóða eBPF forrita fyrir Linux kjarnann einu sinni og nota sérstakan alhliða hleðslutæki sem aðlagar hlaðið forrit í núverandi kjarna og BPF Types Format). CO-RE leysir vandamálið varðandi færanleika samsettra eBPF forrita, sem áður var aðeins hægt að nota í þeirri útgáfu kjarnans sem þau voru sett saman fyrir, þar sem staða þátta í gagnaskipulagi breytist frá útgáfu til útgáfu.
  • RISC-V bakendinn bætir við stuðningi við nýjar kennslusett arkitektúr viðbætur zba, zbb, zbc og zbs, auk ISA viðbygginga fyrir vektor og scalar dulmálsaðgerðir. Sjálfgefið er stuðningur við RISC-V ISA 20191213 forskriftina. -mtune=thead-c906 fánanum hefur verið bætt við til að virkja fínstillingu fyrir T-HEAD c906 kjarna.
  • Stuðningur fyrir __int128_t/integer(kind=16) gerð hefur verið bætt við kóða kynslóða bakenda fyrir AMD GPU sem byggir á GCN örarkitektúrnum. Það er hægt að nota allt að 40 vinnuhópa á hverja tölvueiningu (CU) og allt að 16 leiðbeiningafront (bylgjufront, sett af þráðum sem eru keyrðir samhliða af SIMD vélinni) í hverjum hóp. Áður var aðeins ein leiðbeiningarbrún á CU leyfð.
  • NVPTX bakendinn, hannaður til að búa til kóða með því að nota NVIDIA PTX (Parallel Thread Execution) leiðbeiningasett arkitektúr, hefur bætt við möguleikanum á að nota „-march“, „-mptx“ og „-march-map“ fánana. Innleiddur stuðningur fyrir PTX ISA sm_53, sm_70, sm_75 og sm_80. Sjálfgefinn arkitektúr er sm_30.
  • Í bakenda fyrir PowerPC / PowerPC64 / RS6000 örgjörva hafa útfærslur á innbyggðum aðgerðum verið endurskrifaðar. Innbyggðu aðgerðirnar __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar_setur eru skjal og ___t.fi
  • Stuðningur fyrir Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) og Arm Cortex-X710 (cortex- x2). Bætti við stuðningi við nýja ARMv2 arkitektúrvalkosti til notkunar með "-march" valkostinum: armv8-a, armv8.7-a, armv8.8-a. Bætt við útfærslu á C aðgerðum sem eru innbyggðar í þýðandann (Intrinsics) fyrir atómhleðslu og vistun gagna í minni, byggt á notkun útbreiddra ARM leiðbeininga (ls9). Bætti við stuðningi við að flýta fyrir memcpy, memmove og memset aðgerðum með því að nota mopsoption ARM viðbótina.
  • Bætti við nýjum athugunarham „-fsanitize=shadow-call-stack“ (ShadowCallStack), sem er sem stendur aðeins fáanlegur fyrir AArch64 arkitektúrinn og virkar þegar þú byggir kóða með „-ffixed-r18“ valkostinum. Stillingin veitir vörn gegn því að skrifa yfir heimilisfangið frá falli ef biðminni flæðir yfir á staflanum. Kjarninn í vörninni er að vista heimilisfangið í sérstökum „skugga“ stafla eftir að stjórn hefur verið flutt yfir í aðgerð og endurheimt þetta heimilisfang áður en aðgerðinni er hætt.

Heimild: opennet.ru

Bæta við athugasemd