GCC 12 konpiladore-multzoaren kaleratzea

Urtebeteko garapenaren ondoren, GCC 12.1 doako konpiladore-multzoa kaleratu da, GCC 12.x adar berriko lehen bertsio esanguratsua. Argitalpenaren zenbakitze-eskemaren arabera, 12.0 bertsioa erabili zen garapen-prozesuan, eta GCC 12.1 kaleratu baino pixka bat lehenago, GCC 13.0 adarra jada adarkatu egin zen, eta horren arabera hurrengo bertsio nagusia, GCC 13.1, izango zen. eratu. Maiatzaren 23an, proiektuak 35 urte beteko ditu GCCren lehen edizioa sortu zenetik.

Aldaketa nagusiak:

  • CTF (Compact Type Format) arazketa-formatuaren euskarria gehitu da, C motei, funtzioen arteko konexioei eta arazketa-sinboloei buruzko informazio biltegiratze trinkoa eskaintzen duena. ELF objektuetan txertatuta, formatuak EFL karaktere-taulak erabiltzea ahalbidetzen du, datuak bikoiztea ekiditeko.
  • 1980ko hamarkadan sortutako "STABS" arazketa-informazioa gordetzeko formatuaren euskarria zaharkituta geratu da.
  • Lanak etorkizuneko C2X eta C++23 estandarren laguntza zabaltzen jarraitzen du C eta C++ lengoaietarako. Adibidez, β€œconsteval” esapidearen euskarria gehitu zaio; funtzioen argumentuetan auto erabiltzeko baimena ("f(auto(g()))"); literalak ez diren aldagaiak, goto eta etiketak erabiltzea onartzen da constexpr gisa deklaratutako funtzioetan; dimentsio anitzeko indize-operadoreentzako laguntza gehitu da[]; bada, for eta switch, hasierako blokeen gaitasunak zabaldu dira (β€œfor (T = int erabiliz; T e : v)”).
  • C++ Standard Library-k C++20 eta C++23 estandarren atal esperimentaletarako laguntza hobetu du. Std::move_only_function-rako euskarria gehitu da, , std::basic_string::resize_and_overwrite, , eta std::invoke_r. Constexpr funtzioetan std::unique_ptr, std::vector, std::basic_string, std::optional eta std::variant erabiltzeko baimena.
  • Fortran frontend-ak laguntza osoa eskaintzen du TS 29113 zehaztapenerako, Fortran eta C kodearen arteko eramangarritasuna bermatzeko gaitasunak deskribatzen dituena.
  • Aurretik Clang-i gehitutako __builtin_shufflevector(vec1, vec2, index1, index2, ...) luzapenerako laguntza gehitu da, nahasketa bektorial eta nahasketa eragiketa arruntak egiteko dei bakarra eskaintzen duena.
  • "-O2" optimizazio-maila erabiltzean, bektorializazioa gaituta dago lehenespenez (-fttree-vectorize eta -fvect-cost-model=oso merkea moduak gaituta daude). Eredu oso merkeak bektorializazioa ahalbidetzen du, kode bektorialak bektoretzen ari den kode eskalarra guztiz ordezkatu dezakeen.
  • "-ftrivial-auto-var-init" modua gehitu da pilako aldagaien hasiera esplizitua ahalbidetzeko, hasi gabeko aldagaien erabilerarekin lotutako arazoen jarraipena egiteko eta ahuleziak blokeatzeko.
  • C eta C++ lengoaietarako, __builtin_dynamic_object_size funtzio integratua gehitu da objektu baten tamaina zehazteko, Clang-en antzeko funtzio batekin bateragarria.
  • C eta C++ lengoaietarako, "ez dago erabilgarri" atributuaren euskarria gehitu da (adibidez, erabiltzen saiatzen bazara errore bat sortuko duten funtzioak markatu ditzakezu).
  • C eta C++ lengoaietarako, "#elifdef" eta "#elifndef" aurreprozesatzeko zuzentarauetarako laguntza gehitu da.
  • "-Wbidi-chars" marka gehitu da UTF-8 karaktereak gaizki erabiltzen badira abisua bistaratzeko, norabide biko testua bistaratzeko ordena aldatuz.
  • "-Warray-compare" marka gehitu da abisua bistaratzeko matrizeei erreferentzia egiten dieten bi eragigai konparatzen saiatzean.
  • OpenMP 5.0 eta 5.1 (Open Multi-Processing) estandarrak ezartzea, memoria partekatua eta bektorizazio unitateak (SIMD) dituzten nukleo anitzeko eta hibridoen (CPU+GPU/DSP) sistemetan APIa eta programazio paraleloko metodoak aplikatzeko metodoak definitzen dituztenak. , jarraitu du.
  • OpenACC 2.6 programazio paraleloaren zehaztapenaren inplementazioa hobetu da, GPUetan eta NVIDIA PTX bezalako prozesadore espezializatuetan eragiketak deskargatzeko tresnak definitzen dituena.
  • Intel AVX86-FP512 eta _Float16 motako argibide hedatuen laguntza gehitu da x16 arkitekturarako kodea sortzeko backend-era.
  • x86 arkitekturari dagokionez, prozesadoreetako ahultasunen aurkako babesa gehitu da jarraibideen exekuzio espekulatiboak baldintzarik gabeko aurreranzko salto eragiketen ondoren. Arazoa gertatzen da memorian adar-instrukzioa (SLS, Straight Line Speculation) jarraian berehala jarraian dauden instrukzioak prozesatzeari esker. Babesa gaitzeko, "-mharden-sls" aukera proposatzen da.
  • Hasieratu gabeko aldagaien erabileraren detekzioa gehitu zaio analizatzaile estatiko esperimentalean. Hasierako euskarria gehitu da lerroko txertaketetan muntaketa-kodea aztertzeko. Memoriaren jarraipena hobetua. Etengailuen adierazpenak prozesatzeko kodea berridatzi da.
  • 30 dei berri gehitu dira libgccjit-era, kode-sorgailu bat beste prozesu batzuetan txertatzeko eta JIT bytecode makina-kodean konpilatzeko erabiltzeko liburutegi partekatua.
  • BPF bytecode sortzeko CO-RE (Compile Once - Run Everywhere) mekanismoaren euskarria gehitu da backend-ean, eta horri esker, Linux nukleorako eBPF programen kodea behin bakarrik konpila dezakezu eta kargatzaile unibertsal berezi bat erabil dezakezu. kargatutako programa uneko nukleoan eta BPF Moten formatuan). CO-RE-k konpilatutako eBPF programen eramangarritasunaren arazoa konpontzen du, aurretik konpilatu ziren nukleoaren bertsioan bakarrik erabil zitezkeen, datu-egituretan elementuen posizioa bertsio batetik bestera aldatzen baita.
  • RISC-V backend-ak zba, zbb, zbc eta zbs argibide-multzoen arkitektura-luzapen berrietarako euskarria gehitzen du, baita ISA luzapenak ere eragiketa kriptografiko bektorial eta eskalaretarako. Lehenespenez, RISC-V ISA 20191213 zehaztapenerako laguntza eskaintzen da. -mtune=thead-c906 bandera gehitu da T-HEAD c906 nukleoetarako optimizazioak gaitzeko.
  • __int128_t/integer(kind=16) motarako laguntza gehitu da GCN mikroarkitekturan oinarritutako AMD GPUetarako kodea sortzeko backend-ean. Konputazio-unitate bakoitzeko (CU) 40 lan-talde eta gehienez 16 instrukzio-fronte erabil daitezke (uhin-frontea, SIMD Engine-k paraleloki exekutatzen duen hari multzoa) talde bakoitzeko. Aurretik, CU bakoitzeko instrukzio ertz bakarra onartzen zen.
  • NVPTX backendak, NVIDIA PTX (Parallel Thread Execution) instrukzio multzoen arkitektura erabiliz kodea sortzeko diseinatua, "-march", "-mptx" eta "-march-map" banderak erabiltzeko gaitasuna gehitu du. PTX ISA sm_53, sm_70, sm_75 eta sm_80-rako euskarria ezarri da. Arkitektura lehenetsia sm_30 da.
  • PowerPC / PowerPC64 / RS6000 prozesadoreen backend-ean, integratutako funtzioen inplementazioak berridatzi dira. Funtzio integratuak __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar eta document_set_tfhartin dira
  • Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) eta Arm Cortex-X710 (cortex- x2) laguntza. "-march" aukerarekin erabiltzeko ARMv2 arkitektura-aukera berrientzako euskarria gehitu da: armv8-a, armv8.7-a, armv8.8-a. Konpilatzailean barneraturiko C funtzioen inplementazioa gehitu da (Intrinsekoak) karga atomikoan eta datuak memorian gordetzeko, ARM argibide hedatuen erabileran oinarrituta (ls9). Mopsoption ARM luzapena erabiliz memcpy, memmove eta memset funtzioak bizkortzeko laguntza gehitu da.
  • "-fsanitize=shadow-call-stack" egiaztapen modu berri bat gehitu da (ShadowCallStack), gaur egun AArch64 arkitekturarako bakarrik dagoena eta "-ffixed-r18" aukerarekin kodea eraikitzean funtzionatzen duena. Modu horrek funtzio baten itzulera helbidea gainidaztearen aurkako babesa eskaintzen du pilan buffer gainezka dagoenean. Babesaren funtsa itzulera helbidea aparteko "itzal" pila batean gordetzea da, kontrola funtzio batera transferitu eta helbide hori berreskuratu ondoren funtziotik irten aurretik.

Iturria: opennet.ru

Gehitu iruzkin berria