Itusilẹ ti GCC 12 compiler suite

Lẹhin ọdun kan ti idagbasoke, GCC 12.1 alakojo ọfẹ ti tu silẹ, itusilẹ pataki akọkọ ni ẹka GCC 12.x tuntun. Ni ibamu pẹlu ero nọmba itusilẹ tuntun, ẹya 12.0 ni a lo ninu ilana idagbasoke, ati ni kete ṣaaju itusilẹ ti GCC 12.1, ẹka GCC 13.0 ti ni ẹka tẹlẹ, lori ipilẹ eyiti itusilẹ pataki atẹle, GCC 13.1, yoo wa ni akoso. Ni Oṣu Karun ọjọ 23, iṣẹ akanṣe naa yoo ṣe ayẹyẹ ọdun 35 lati ipilẹṣẹ ti ẹda akọkọ ti GCC.

Awọn iyipada akọkọ:

  • Atilẹyin ti a ṣafikun fun ọna kika ọna kika CTF (Iru Iwapọ), eyiti o pese ibi ipamọ iwapọ ti alaye nipa awọn iru C, awọn asopọ laarin awọn iṣẹ ati awọn aami aṣiṣe. Nigbati o ba fi sii ninu awọn nkan ELF, ọna kika naa ngbanilaaye lilo awọn tabili ohun kikọ EFL lati yago fun ẹda data.
  • Atilẹyin fun ọna kika ibi ipamọ alaye n ṣatunṣe aṣiṣe “STABS”, ti a ṣẹda ni awọn ọdun 1980, ti lọ silẹ.
  • Iṣẹ n tẹsiwaju lati faagun atilẹyin fun ọjọ iwaju C2X ati awọn iṣedede C ++ 23 fun awọn ede C ati C ++. Fun apẹẹrẹ, atilẹyin fun ikosile “ti o ba jẹ pe consteval” ti ṣafikun; gba ọ laaye lati lo adaṣe ni awọn ariyanjiyan iṣẹ (“f (laifọwọyi (g ()))”); lilo awọn oniyipada ti kii ṣe ojulowo, goto ati awọn aami ni a gba laaye ni awọn iṣẹ ti a kede bi constexpr; atilẹyin afikun fun oniṣẹ ẹrọ atọka multidimensional[]; ni ti, fun ati yipada, awọn agbara ti awọn bulọọki ipilẹṣẹ ti pọ si (“fun (lilo T = int; T e: v)”).
  • Ile-ikawe Standard C ++ ti ni ilọsiwaju atilẹyin fun awọn apakan adanwo ti awọn iṣedede C ++ 20 ati C ++ 23. Atilẹyin afikun fun std :: move_only_function, , std :: basic_string :: size_and_overwrite, , ati std :: invoke_r. Ti gba laaye lati lo std :: oto_ptr, std :: vector, std :: base_string, std :: iyan ati std :: iyatọ ninu awọn iṣẹ constexpr.
  • Forran frontend n pese atilẹyin ni kikun fun sipesifikesonu TS 29113, eyiti o ṣapejuwe awọn agbara fun aridaju gbigbe laarin Fortran ati koodu C.
  • Atilẹyin ti a ṣafikun fun __builtin_shufflevector (vec1, vec2, index1, index2, ...) itẹsiwaju ti a ṣafikun tẹlẹ si Clang, eyiti o funni ni ipe kan lati ṣe dapọpọ vector ti o wọpọ ati awọn iṣẹ ṣiṣe dapọ.
  • Nigbati o ba nlo ipele iṣapeye "-O2", isọdọtun jẹ ṣiṣe nipasẹ aiyipada (awọn -ftree-vectorize ati -fvect-cost-model=awọn ipo olowo poku ti ṣiṣẹ). Awoṣe olowo poku ngbanilaaye vectorization nikan ti koodu fekito ba le paarọ koodu iwọn-iwọn patapata ti a sọ di vectorized.
  • Ipo “-ftrivial-auto-var-init” ti a ṣafikun lati jẹ ki ipilẹṣẹ titọ ti awọn oniyipada lori akopọ lati tọpa awọn ọran ati dina awọn ailagbara ti o ni nkan ṣe pẹlu lilo awọn oniyipada ti ko ni ibẹrẹ.
  • Fun awọn ede C ati C ++, iṣẹ ti a ṣe sinu __builtin_dynamic_object_size ti ni afikun lati pinnu iwọn ohun kan, ni ibamu pẹlu iṣẹ kanna lati Clang.
  • Fun awọn ede C ati C ++, atilẹyin fun abuda “ko si” ti ṣafikun (fun apẹẹrẹ, o le samisi awọn iṣẹ ti yoo ṣe aṣiṣe ti o ba gbiyanju lati lo wọn).
  • Fun awọn ede C ati C ++, atilẹyin fun awọn ilana iṣaju “#elifdef” ati “#elifndef” ti jẹ afikun.
  • Fikun asia "-Wbidi-chars" lati ṣe afihan ikilọ ti awọn ohun kikọ UTF-8 ba jẹ lilo ti ko tọ, yiyipada ilana ti ọrọ bidirectional han.
  • Fikun asia "-Warray-compare" lati ṣe afihan ikilọ nigbati o ngbiyanju lati ṣe afiwe awọn operand meji ti o tọka si awọn akojọpọ.
  • Imuse ti OpenMP 5.0 ati 5.1 (Open Multi-Processing) awọn ajohunše, eyiti o ṣalaye API ati awọn ọna fun lilo awọn ọna siseto ti o jọra lori ọpọlọpọ-mojuto ati arabara (CPU + GPU/DSP) awọn eto pẹlu iranti pinpin ati awọn ẹya vectorization (SIMD) , ti tesiwaju.
  • Imudara imuse ti OpenACC 2.6 sipesifikesonu siseto ni afiwe, eyiti o ṣalaye awọn irinṣẹ fun awọn iṣẹ ṣiṣe piparẹ lori awọn GPU ati awọn ilana amọja bii NVIDIA PTX.
  • Atilẹyin fun awọn ilana ti o gbooro sii Intel AVX86-FP512 ati iru _Float16 ti ṣafikun si ẹhin iran koodu fun faaji x16.
  • Fun faaji x86, aabo ti ni afikun lodi si awọn ailagbara ninu awọn ilana ti o fa nipasẹ ipaniyan akiyesi ti awọn ilana lẹhin awọn iṣẹ fo siwaju lainidi. Iṣoro naa waye nitori sisẹ iṣaaju-emptive ti awọn ilana lẹsẹkẹsẹ ti o tẹle itọnisọna ẹka ni iranti (SLS, Speculation Line Straight). Lati mu aabo ṣiṣẹ, aṣayan “-mharden-sls” ni a dabaa.
  • Ṣafihan wiwa ti lilo awọn oniyipada ti ko ni ibẹrẹ si olutupalẹ aimi esiperimenta. Atilẹyin akọkọ ti a ṣafikun fun itupalẹ koodu apejọ ni awọn ifibọ laini. Imudara ipasẹ iranti. Awọn koodu fun sisẹ awọn ikosile iyipada ti jẹ atunkọ.
  • Ṣafikun awọn ipe tuntun 30 si libgccjit, ile-ikawe pinpin kan fun ifibọ olupilẹṣẹ koodu kan sinu awọn ilana miiran ati lilo rẹ lati ṣajọ baiticode sinu koodu ẹrọ.
  • Atilẹyin fun ẹrọ CO-RE (Ṣakojọ Lẹẹkan - Ṣiṣe Nibikibi) ti ṣafikun si ẹhin ẹhin fun ipilẹṣẹ BPF bytecode, eyiti o fun ọ laaye lati ṣajọ koodu ti awọn eto eBPF fun ekuro Linux lẹẹkanṣoṣo ati lo ẹru gbogbo agbaye pataki kan ti o ṣe deede ti kojọpọ eto si ekuro lọwọlọwọ ati Ọna kika Awọn iru BPF). CO-RE yanju iṣoro gbigbe ti awọn eto eBPF ti a ṣajọpọ, eyiti o le ṣee lo ni iṣaaju ninu ẹya ekuro fun eyiti a ṣe akopọ wọn, nitori ipo awọn eroja ninu awọn ẹya data yipada lati ẹya si ẹya.
  • RISC-V backend ṣe afikun atilẹyin fun eto ẹkọ titun ṣeto awọn amugbooro faaji zba, zbb, zbc ati zbs, bakanna bi awọn amugbooro ISA fun awọn iṣẹ-iṣereti ati scalar cryptographic. Nipa aiyipada, atilẹyin fun sipesifikesonu RISC-V ISA 20191213 ti pese. -mtune=thead-c906 flag ti wa ni afikun lati jẹ ki awọn iṣapeye ṣiṣẹ fun awọn ohun kohun T-HEAD c906.
  • Atilẹyin fun iru __int128_t/ integer (iru = 16) ni a ti ṣafikun si ẹhin iran koodu fun AMD GPU ti o da lori GCN microarchitecture. O ṣee ṣe lati lo to awọn ẹgbẹ iṣẹ 40 fun ẹyọ iširo (CU) ati to awọn iwaju itọnisọna 16 (iwaju igbi, ṣeto awọn okun ti a ṣe ni afiwe nipasẹ Ẹrọ SIMD) fun ẹgbẹ kan. Ni iṣaaju, eti itọnisọna kan nikan fun CU ni a gba laaye.
  • Atilẹyin NVPTX, ti a ṣe apẹrẹ lati ṣe ipilẹṣẹ koodu nipa lilo NVIDIA PTX (Parallel Thread Execution) ilana ṣeto faaji, ti ṣafikun agbara lati lo awọn asia “-march”, “-mptx” ati “-march-map”. Atilẹyin imuse fun PTX ISA sm_53, sm_70, sm_75 ati sm_80. Awọn faaji aiyipada jẹ sm_30.
  • Ni ẹhin fun awọn ilana PowerPC / PowerPC64 / RS6000, awọn imuse ti awọn iṣẹ ti a ṣe sinu ti tun kọ. Awọn iṣẹ ti a ṣe sinu __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasr, __builtin_set_tfhar,
  • Atilẹyin fun Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) ati Arm Cortex-X710 (cortex- x2). Atilẹyin ti a ṣafikun fun awọn aṣayan faaji ARMv2 tuntun fun lilo pẹlu aṣayan “-march”: armv8-a, armv8.7-a, armv8.8-a. Fikun imuse ti awọn iṣẹ C ti a ṣe sinu akopọ (Intrinsics) fun ikojọpọ atomiki ati fifipamọ data sinu iranti, da lori lilo awọn ilana ARM ti o gbooro (ls9). Atilẹyin ti a ṣafikun fun isare memcpy, memmove ati awọn iṣẹ memset nipa lilo itẹsiwaju ARM mopsoption.
  • Ṣafikun ipo iṣayẹwo tuntun “-fsanitize=shadow-call-stack” (ShadowCallStack), eyiti o wa lọwọlọwọ nikan fun faaji AArch64 ati ṣiṣẹ nigbati koodu kọ pẹlu aṣayan “-ffixed-r18”. Ipo naa n pese aabo lodi si atunkọ adirẹsi ipadabọ lati iṣẹ kan ni iṣẹlẹ ti ifipamọ apọju lori akopọ. Koko-ọrọ ti aabo ni lati ṣafipamọ adirẹsi ipadabọ ni akopọ “ojiji” lọtọ lẹhin gbigbe iṣakoso si iṣẹ kan ati gbigba adirẹsi yii pada ṣaaju ki o to jade iṣẹ naa.

orisun: opennet.ru

Fi ọrọìwòye kun