Kutolewa kwa kikundi cha mkusanyaji wa GCC 12

Baada ya mwaka wa maendeleo, kitengo cha mkusanyaji bila malipo GCC 12.1 kimetolewa, toleo la kwanza muhimu katika tawi jipya la GCC 12.x. Kwa mujibu wa mpango mpya wa kuorodhesha toleo, toleo la 12.0 lilitumika katika mchakato wa ukuzaji, na muda mfupi kabla ya kutolewa kwa GCC 12.1, tawi la GCC 13.0 lilikuwa tayari limegawanyika, kwa msingi ambao toleo kuu lililofuata, GCC 13.1, lingetoa. kuundwa. Mnamo Mei 23, mradi utaadhimisha miaka 35 tangu kuundwa kwa toleo la kwanza la GCC.

Mabadiliko kuu:

  • Usaidizi ulioongezwa kwa umbizo la utatuzi la CTF (Aina ya Compact Type), ambayo hutoa hifadhi fupi ya maelezo kuhusu aina za C, miunganisho kati ya vitendakazi na alama za utatuzi. Inapopachikwa katika vipengee vya ELF, umbizo huruhusu matumizi ya majedwali ya vibambo vya EFL ili kuepuka kurudia data.
  • Usaidizi wa umbizo la utatuzi la uhifadhi wa taarifa za "STABS", iliyoundwa katika miaka ya 1980, umeacha kutumika.
  • Kazi inaendelea kupanua usaidizi kwa viwango vya baadaye vya C2X na C++23 kwa lugha za C na C++. Kwa mfano, usaidizi wa usemi wa "ikiwa consteval" umeongezwa; kuruhusiwa kutumia otomatiki katika hoja za kazi (β€œf(auto(g()))”); matumizi ya vigezo visivyo halisi, goto na lebo inaruhusiwa katika kazi zilizotangazwa kama constexpr; iliongeza usaidizi kwa waendeshaji wa faharasa wa pande nyingi[]; katika ikiwa, kwa na kubadili, uwezo wa vitalu vya uanzishaji umepanuliwa ("kwa (kwa kutumia T = int; T e: v)").
  • Maktaba ya Kawaida ya C++ imeboresha usaidizi kwa sehemu za majaribio za viwango vya C++20 na C++23. Usaidizi umeongezwa kwa std::move_only_function, , std::basic_string::resize_and_overwrite, , na std::invoke_r. Inaruhusiwa kutumia std::unique_ptr, std::vector, std::basic_string, std::hiari na std::lahaja katika vitendakazi vya constexpr.
  • Sehemu ya mbele ya Fortran hutoa usaidizi kamili kwa vipimo vya TS 29113, ambavyo vinaelezea uwezo wa kuhakikisha kubebeka kati ya msimbo wa Fortran na C.
  • Usaidizi ulioongezwa kwa kiendelezi cha __builtin_shufflevector(vec1, vec2, index1, index2, ...) kilichoongezwa hapo awali kwa Clang, ambacho hutoa simu moja kufanya uchanganuzi wa kawaida wa vekta na kuchanganya shughuli.
  • Unapotumia kiwango cha uboreshaji cha "-O2", uwekaji vekta huwezeshwa kwa chaguo-msingi (mode za -ftree-vectorize na -fvect-cost-model=very-nafuu sana zimewezeshwa). Muundo wa bei nafuu sana huruhusu uwekaji vekta ikiwa tu msimbo wa vekta unaweza kuchukua nafasi ya msimbo wa scalar unaowekwa vekta.
  • Hali ya "-ftrivial-auto-var-init" imeongezwa ili kuwezesha uanzishaji kwa njia dhahiri wa viambajengo kwenye rafu ili kufuatilia masuala na kuzuia udhaifu unaohusishwa na matumizi ya viambajengo ambavyo havijaanzishwa.
  • Kwa lugha za C na C++, chaguo za kukokotoa zilizojengewa ndani __builtin_dynamic_object_size imeongezwa ili kubainisha ukubwa wa kitu, kinachooana na chaguo za kukokotoa sawa kutoka kwa Clang.
  • Kwa lugha za C na C++, usaidizi wa sifa "haipatikani" umeongezwa (kwa mfano, unaweza kuweka alama kwenye vipengele ambavyo vitazalisha hitilafu ikiwa utajaribu kuzitumia).
  • Kwa lugha za C na C++, uwezo wa kutumia maagizo ya kuchakata mapema "#elifdef" na "#elifndef" umeongezwa.
  • Imeongeza alama ya "-Wbidi-chars" ili kuonyesha onyo ikiwa vibambo vya UTF-8 vinatumiwa vibaya, na kubadilisha mpangilio ambao maandishi ya pande mbili yanaonyeshwa.
  • Imeongeza bendera ya "-Warray-compare" ili kuonyesha onyo wakati wa kujaribu kulinganisha operesheni mbili zinazorejelea safu.
  • Utekelezaji wa viwango vya OpenMP 5.0 na 5.1 (Open Multi-Processing), ambavyo hufafanua API na mbinu za kutumia mbinu sambamba za upangaji kwenye mifumo ya msingi na mseto (CPU+GPU/DSP) yenye vitengo vya kumbukumbu na vekta zinazoshirikiwa (SIMD) , imeendelea.
  • Utekelezaji ulioboreshwa wa vipimo vya programu sambamba vya OpenACC 2.6, ambavyo hufafanua zana za upakiaji wa shughuli kwenye GPU na vichakataji maalumu kama vile NVIDIA PTX.
  • Usaidizi wa maagizo yaliyopanuliwa Intel AVX86-FP512 na aina ya _Float16 imeongezwa kwenye mandharinyuma ya kizazi cha msimbo kwa usanifu wa x16.
  • Kwa usanifu wa x86, ulinzi umeongezwa dhidi ya udhaifu katika vichakataji unaosababishwa na utekelezaji wa kubahatisha wa maagizo baada ya shughuli za kuruka mbele bila masharti. Tatizo hutokea kutokana na usindikaji wa awali wa maagizo mara moja kufuatia maelekezo ya tawi katika kumbukumbu (SLS, Ukadiriaji wa Mstari Sawa). Ili kuwezesha ulinzi, chaguo la "-mharden-sls" linapendekezwa.
  • Ugunduzi ulioongezwa wa utumiaji wa vigeu visivyojulikana kwa kichanganuzi tuli cha majaribio. Imeongeza usaidizi wa awali wa kuchanganua msimbo wa kusanyiko katika viingilio vya ndani. Ufuatiliaji wa kumbukumbu ulioboreshwa. Msimbo wa kuchakata usemi wa kubadili umeandikwa upya.
  • Imeongeza simu 30 mpya kwa libgccjit, maktaba iliyoshirikiwa ya kupachika jenereta ya msimbo katika michakato mingine na kuitumia JIT kukusanya bytecode katika msimbo wa mashine.
  • Usaidizi wa utaratibu wa CO-RE (Compile Once - Run Everywhere) umeongezwa kwenye sehemu ya nyuma ya kuzalisha bytecode ya BPF, ambayo hukuruhusu kukusanya nambari za programu za eBPF za kernel ya Linux mara moja tu na utumie kipakiaji maalum cha ulimwengu ambacho hubadilisha programu iliyopakiwa kwa kernel ya sasa na Umbizo la Aina za BPF). CO-RE hutatua tatizo la kubebeka kwa programu za eBPF zilizokusanywa, ambazo hapo awali zingeweza kutumika tu katika toleo la kernel ambalo zilitungwa, kwani nafasi ya vipengele katika miundo ya data inabadilika kutoka toleo hadi toleo.
  • Mazingira ya nyuma ya RISC-V yanaongeza usaidizi kwa viendelezi vipya vya usanifu wa seti mpya za maagizo zba, zbb, zbc na zbs, pamoja na viendelezi vya ISA kwa vekta na uendeshaji wa kriptografia ya scalar. Kwa chaguomsingi, uwezo wa kutumia vipimo vya RISC-V ISA 20191213 umetolewa. Alama ya -mtune=thead-c906 imeongezwa ili kuwezesha uboreshaji wa core T-HEAD c906.
  • Usaidizi wa aina ya __int128_t/integer(kind=16) umeongezwa kwenye mandharinyuma ya utengenezaji wa msimbo wa AMD GPU kulingana na usanifu mdogo wa GCN. Inawezekana kutumia hadi vikundi 40 vya kazi kwa kitengo cha kompyuta (CU) na hadi mipaka 16 ya maagizo (wavefront, seti ya nyuzi zinazotekelezwa sambamba na Injini ya SIMD) kwa kila kikundi. Hapo awali, makali moja tu ya maagizo kwa kila CU yaliruhusiwa.
  • Mazingira ya nyuma ya NVPTX, yaliyoundwa kutengeneza msimbo kwa kutumia usanifu wa seti za maagizo ya NVIDIA PTX (Sambamba na Utekelezaji), imeongeza uwezo wa kutumia bendera za "-march", "-mptx" na "-march-map". Usaidizi uliotekelezwa kwa PTX ISA sm_53, sm_70, sm_75 na sm_80. Usanifu chaguo-msingi ni sm_30.
  • Katika upande wa nyuma wa vichakataji vya PowerPC / PowerPC64 / RS6000, utekelezaji wa vitendaji vilivyojumuishwa umeandikwa upya. Vitendaji vilivyojengewa ndani __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_builtin_set_set_set_set.
  • Usaidizi kwa Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) na Arm Cortex-X710 (cortex- x2). Usaidizi ulioongezwa kwa chaguo mpya za usanifu wa ARMv2 kwa matumizi na chaguo la "-march": armv8-a, armv8.7-a, armv8.8-a. Utekelezaji ulioongezwa wa vitendakazi vya C vilivyojengwa ndani ya kikusanyaji (Intrinsics) kwa ajili ya kupakia na kuhifadhi data kwa atomiki kwenye kumbukumbu, kulingana na matumizi ya maagizo yaliyopanuliwa ya ARM (ls9). Usaidizi ulioongezwa wa kuharakisha utendakazi wa memcpy, memmove na memset kwa kutumia kiendelezi cha mopsoption ARM.
  • Imeongeza hali mpya ya kuangalia "-fsanitize=shadow-call-stack" (ShadowCallStack), ambayo kwa sasa inapatikana tu kwa usanifu wa AArch64 na inafanya kazi wakati wa kujenga msimbo kwa chaguo la "-fixed-r18". Modi hii hutoa ulinzi dhidi ya kubatilisha anwani ya kurejesha kutoka kwa chaguo za kukokotoa katika tukio la bafa kufurika kwenye rafu. Kiini cha ulinzi ni kuhifadhi anwani ya kurejesha katika safu tofauti ya "kivuli" baada ya kuhamisha udhibiti kwa kazi na kurejesha anwani hii kabla ya kuondoka kwenye kazi.

Chanzo: opennet.ru

Kuongeza maoni