Divilgasyon suite konpilateur GCC 12 la

Apre yon ane nan devlopman, yo te lage suite konpilateur gratis GCC 12.1, premye lage enpòtan nan nouvo branch GCC 12.x. An akò ak nouvo konplo nimewote lage, yo te itilize vèsyon 12.0 nan pwosesis devlopman, ak yon ti tan anvan liberasyon GCC 12.1, branch GCC 13.0 te deja branch, sou baz pwochen gwo lage, GCC 13.1, ta. dwe fòme. Nan dat 23 me, pwojè a pral selebre 35 ane depi fòmasyon premye edisyon GCC.

Chanjman prensipal yo:

  • Te ajoute sipò pou fòma debogaj CTF (Compact Type Format), ki bay kontra depo enfòmasyon sou kalite C, koneksyon ant fonksyon ak senbòl debogaj. Lè yo entegre nan objè ELF, fòma a pèmèt itilizasyon tab karaktè EFL pou evite kopi done.
  • Sipò pou fòma depo enfòmasyon debogaj "STABS", ki te kreye nan ane 1980 yo, te obsolète.
  • Travay ap kontinye ogmante sipò pou pwochen estanda C2X ak C++23 pou lang C ak C++. Pou egzanp, sipò pou ekspresyon "si konsteval" yo te ajoute; pèmèt yo sèvi ak oto nan agiman fonksyon ("f(oto(g()))"); itilizasyon varyab ki pa literal, goto ak etikèt yo pèmèt nan fonksyon yo deklare kòm constexpr; te ajoute sipò pou operatè endèks miltidimansyonèl operatè []; nan si, pou ak chanje, kapasite yo nan blòk inisyalizasyon yo te elaji ("pou (itilize T = int; T e : v)").
  • Bibliyotèk Creole C++ a amelyore sipò pou seksyon eksperimantal estanda C++20 ak C++23. Te ajoute sipò pou std::move_only_function, , std::basic_string::resize_and_overwrite, , ak std::invoke_r. Pèmèt yo sèvi ak std::unique_ptr, std::vector, std::basic_string, std::opsyonèl ak std::variant nan fonksyon constexpr.
  • Interface Fortran a bay sipò konplè pou spesifikasyon TS 29113, ki dekri kapasite pou asire portabilite ant Fortran ak kòd C.
  • Te ajoute sipò pou ekstansyon __builtin_shufflevector(vec1, vec2, index1, index2, ...) te deja ajoute nan Clang, ki ofri yon sèl apèl pou fè operasyon vektè shuffle ak shuffle komen.
  • Lè w ap itilize nivo optimize "-O2", vektorizasyon aktive pa default (modèl -ftree-vectorize ak -fvect-cost-model = mòd ​​trè bon mache yo aktive). Modèl trè bon mache a pèmèt vektorizasyon sèlman si kòd vektè a ka konplètman ranplase kòd eskalè ke yo vektorize a.
  • Te ajoute mòd "-ftrivial-auto-var-init" pou pèmèt inisyalizasyon klè nan varyab sou pil la pou swiv pwoblèm ak bloke frajilite ki asosye ak itilizasyon varyab ki pa inisyalize.
  • Pou lang C ak C++, yo te ajoute yon fonksyon entegre __builtin_dynamic_object_size pou detèmine gwosè yon objè, konpatib ak yon fonksyon ki sanble nan Clang.
  • Pou lang C ak C++, sipò pou atribi "disponib" yo te ajoute (pa egzanp, ou ka make fonksyon ki pral jenere yon erè si ou eseye sèvi ak yo).
  • Pou lang C ak C++, yo te ajoute sipò pou direktiv pre-pwosesis "#elifdef" ak "#elifndef".
  • Te ajoute drapo "-Wbidi-chars" pou montre yon avètisman si karaktè UTF-8 yo itilize mal, chanje lòd tèks bidireksyon yo parèt.
  • Te ajoute drapo "-Warray-compare" pou avèti lè w ap eseye konpare de operand ki refere a etalaj.
  • Aplikasyon estanda OpenMP 5.0 ak 5.1 (Open Multi-Processing) ki defini API ak metòd pou aplike metòd pwogramasyon paralèl sou sistèm milti-nwayo ak ibrid (CPU + GPU/DSP) ak memwa pataje ak inite vektorizasyon (SIMD) , te kontinye.
  • Amelyore aplikasyon spesifikasyon pwogramasyon paralèl OpenACC 2.6, ki defini zouti pou dechaje operasyon sou GPU ak processeurs espesyalize tankou NVIDIA PTX.
  • Sipò pou enstriksyon pwolonje Intel AVX86-FP512 ak kalite _Float16 yo te ajoute nan backend jenerasyon kòd pou achitekti x16 la.
  • Pou achitekti x86 la, yo te ajoute pwoteksyon kont frajilite nan processeurs ki te koze pa ekzekisyon spéculatif nan enstriksyon apre operasyon so devan san kondisyon. Pwoblèm nan rive akòz tretman prevantif nan enstriksyon imedyatman apre enstriksyon branch nan memwa (SLS, Straight Line Speculation). Pou pèmèt pwoteksyon, opsyon "-mharden-sls" yo pwopoze.
  • Te ajoute deteksyon itilizasyon varyab ki pa inisyalize nan analizeur estatik eksperimantal la. Te ajoute sipò inisyal pou analize kòd asanble nan foure inline. Suivi memwa amelyore. Kòd pou trete ekspresyon switch yo te reekri.
  • Te ajoute 30 nouvo apèl nan libgccjit, yon bibliyotèk pataje pou entegre yon dèlko kòd nan lòt pwosesis epi sèvi ak li nan JIT konpile bytecode nan kòd machin.
  • Sipò pou mekanis CO-RE (konpile yon fwa - kouri toupatou) te ajoute nan backend la pou jenere BPF bytecode, ki pèmèt ou konpile kòd pwogram eBPF pou nwayo Linux yon sèl fwa epi sèvi ak yon chajè espesyal inivèsèl ki adapte a. pwogram chaje nan Kernel aktyèl la ak fòma BPF Kalite). CO-RE rezoud pwoblèm nan portabilite nan pwogram eBPF konpile, ki te deja kapab itilize sèlman nan vèsyon an nan nwayo a pou ki yo te konpile, depi pozisyon nan eleman nan estrikti done chanje soti nan vèsyon an vèsyon.
  • Backend RISC-V ajoute sipò pou nouvo ekstansyon achitekti ansèyman zba, zbb, zbc ak zbs, ansanm ak ekstansyon ISA pou operasyon kriptografik vektè ak eskalè. Pa default, yo bay sipò pou spesifikasyon RISC-V ISA 20191213. -mtune=thead-c906 drapo a te ajoute pou pèmèt optimize pou nwayo T-HEAD c906.
  • Yo te ajoute sipò pou kalite __int128_t/integer(kind=16) nan backend jenerasyon kòd pou GPU AMD ki baze sou mikrochitekti GCN. Li posib pou itilize jiska 40 gwoup travay pou chak inite enfòmatik (CU) ak jiska 16 fwon ansèyman (wavefront, yon seri fil egzekite an paralèl pa motè SIMD la) pou chak gwoup. Anvan sa, se sèlman yon kwen enstriksyon pou chak CU te pèmèt.
  • Backend NVPTX, ki fèt pou jenere kòd lè l sèvi avèk achitekti NVIDIA PTX (Parallel Thread Execution) ansanm enstriksyon, te ajoute kapasite pou sèvi ak drapo "-march", "-mptx" ak "-march-map". Aplike sipò pou PTX ISA sm_53, sm_70, sm_75 ak sm_80. Achitekti default la se sm_30.
  • Aplikasyon fonksyon entegre yo te reekri nan backend pou processeurs PowerPC/PowerPC64/RS6000. Fonksyon entegre __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar, __builtin_set_tfiar.
  • Sipò pou Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) ak Arm Cortex-X710 (cortex-x2). Te ajoute sipò pou nouvo opsyon achitekti ARMv2 pou itilize ak opsyon "-march": armv8-a, armv8.7-a, armv8.8-a. Te ajoute aplikasyon C fonksyon ki te konstwi nan du a (Intrinsics) pou chaje atomik ak ekonomize done nan memwa, ki baze sou itilizasyon enstriksyon ARM pwolonje (ls9). Te ajoute sipò pou akselere fonksyon memcpy, memmove ak memset lè l sèvi avèk ekstansyon mopsoption ARM la.
  • Te ajoute yon nouvo mòd tcheke "-fsanitize=shadow-call-stack" (ShadowCallStack), ki kounye a disponib sèlman pou achitekti AArch64 ak travay lè kòd bati ak opsyon "-ffixed-r18". Mòd la bay pwoteksyon kont ranplase adrès retounen nan yon fonksyon nan evènman an nan yon debòde tanpon sou chemine a. Sans pwoteksyon an se pou konsève pou adrès retounen nan yon pil separe "lonbraj" apre yo fin transfere kontwòl nan yon fonksyon ak rekipere adrès sa a anvan ou soti nan fonksyon an.

Sous: opennet.ru

Add nouvo kòmantè