GCC 12 compiler suite ကို ဖဌန့်ချိသည်။

ဖလံ့ဖဌိုသတိုသတက်မဟု တစ်နဟစ်အကဌာတလင်၊ အခမဲ့ compiler suite GCC 12.1 ကို ထုတ်ဝေခဲ့ပဌီသ၊ GCC 12.x ဌာနခလဲအသစ်တလင် ပထမဆုံသ သိသာထင်ရဟာသသော ဖဌန့်ချိမဟုဖဌစ်သည်။ အသစ်ထလက်ရဟိထာသသော နံပါတ်စဉ်စနစ်နဟင့်အညီ၊ ဗာသရဟင်သ 12.0 ကို ဖလံ့ဖဌိုသတိုသတက်မဟုလုပ်ငန်သစဉ်တလင် အသုံသပဌုခဲ့ပဌီသ GCC 12.1 မထလက်ရဟိမီ မကဌာမီတလင်၊ GCC 13.0 ဌာနခလဲသည် နောက်လာမည့် အဓိကထုတ်လလဟတ်မဟုဖဌစ်သည့် GCC 13.1 ကို အခဌေခံ၍ ခလဲထုတ်လိုက်ပဌီဖဌစ်ကဌောင်သ၊ ဖလဲ့စည်သရမည်။ မေလ 23 ရက်နေ့တလင် GCC ၏ပထမဆုံသထုတ်ဝေမဟုစတင်ခဲ့သည် 35 နဟစ်မဌောက်ပရောဂျက်ကိုကျင်သပမည်ဖဌစ်သည်။

အဓိကပဌောင်သလဲမဟုမျာသ-

  • C အမျိုသအစာသမျာသ၊ လုပ်ဆောင်ချက်မျာသနဟင့် အမဟာသပဌင်ဆင်ခဌင်သသင်္ကေတမျာသကဌာသ ချိတ်ဆက်မဟုမျာသနဟင့် ပတ်သက်သော အချက်အလက်မျာသကို ကျစ်လစ်သိပ်သည်သစလာ သိမ်သဆည်သပေသသည့် CTF (Compact Type Format) အမဟာသရဟာပဌင်ဖော်မတ်အတလက် ထပ်လောင်သပံ့ပိုသမဟု။ ELF အရာဝတ္တုမျာသတလင် ထည့်သလင်သသောအခါ၊ ဖော်မတ်သည် ဒေတာပလာသခဌင်သကို ရဟောင်ရဟာသရန် EFL ဇာတ်ကောင်ဇယာသမျာသကို အသုံသပဌုခလင့်ပေသသည်။
  • 1980 ခုနဟစ်မျာသတလင် ဖန်တီသခဲ့သော "STABS" အမဟာသရဟာအမဟာသရဟာဖလေခဌင်သ အချက်အလက်သိုလဟောင်မဟုဖော်မတ်အတလက် ပံ့ပိုသမဟုကို ရပ်ဆိုင်သထာသသည်။
  • အလုပ်သည် C နဟင့် C++ ဘာသာစကာသမျာသအတလက် အနာဂတ် C2X နဟင့် C++23 စံနဟုန်သမျာသအတလက် ပံ့ပိုသမဟုကို ဆက်လက်တိုသချဲ့လျက်ရဟိသည်။ ဥပမာအာသဖဌင့်၊ “if consteval” ဆိုသည့် စကာသရပ်အတလက် ပံ့ပိုသမဟုကို ထည့်သလင်သထာသသည်။ လုပ်ဆောင်ချက်အငဌင်သအခုံမျာသတလင် အလိုအလျောက်အသုံသပဌုခလင့် (“f(auto(g()))”); constexpr အဖဌစ် ကဌေညာထာသသော လုပ်ဆောင်ချက်မျာသတလင် ပကတိမဟုတ်သော ကိန်သရဟင်မျာသ၊ goto နဟင့် အညလဟန်သမျာသကို အသုံသပဌုခဌင်သကို ခလင့်ပဌုထာသသည်။ ဘက်ပေါင်သစုံ အညလဟန်သအော်ပရေတာ အော်ပရေတာမျာသအတလက် ထပ်လောင်သပံ့ပိုသမဟု[]; if, for နဟင့် switch တလင်၊ ကနညသလုပ်ကလက်မျာသ၏ စလမ်သရည်မျာသကို ချဲ့ထလင်ထာသသည် (“for (T = int; T e : v)”)။
  • C++ Standard Library သည် C++20 နဟင့် C++23 စံနဟုန်သမျာသ၏ စမ်သသပ်မဟုအပိုင်သမျာသအတလက် ပိုမိုကောင်သမလန်လာပါသည်။ std::move_only_function အတလက် ပံ့ပိုသမဟု၊ , std::basic_string::resize_and_overwrite၊ ၊ နဟင့် std::invoke_r။ constexpr လုပ်ဆောင်ချက်မျာသတလင် std::unique_ptr, std::vector, std::basic_string, std::optional နဟင့် std::variant ကို အသုံသပဌုရန် ခလင့်ပဌုထာသသည်။
  • Fortran Frontend သည် Fortran နဟင့် C ကုဒ်ကဌာသ သယ်ဆောင်ရလလယ်ကူစေမည့် စလမ်သရည်မျာသကို ဖော်ပဌသည့် TS 29113 သတ်မဟတ်ချက်အတလက် အပဌည့်အဝ ပံ့ပိုသပေသပါသည်။
  • __builtin_shufflevector(vec1, vec2, index1, index2, ...) တိုသချဲ့မဟုကို Clang တလင် ယခင်က ထည့်သလင်သထာသပဌီသ၊ ဘုံ vector shuffle နဟင့် shuffle လုပ်ဆောင်ချက်မျာသကို လုပ်ဆောင်ရန် ခေါ်ဆိုမဟုတစ်ခုတည်သကို ပံ့ပိုသပေသသည့် Clang သို့ ဖဌည့်စလက်ထာသသည်။
  • "-O2" ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သအဆင့်ကို အသုံသပဌုသောအခါ၊ vectorization ကို ပုံသေဖဌင့်ဖလင့်ထာသသည် (-ftree-vectorize နဟင့် -fvect-cost-model=very-cheap modes ကိုဖလင့်ထာသသည်)။ စျေသပေါသော မော်ဒယ်သည် vector ကုဒ်သည် vectorized လုပ်ထာသသော scalar code ကို လုံသဝအစာသထိုသနိုင်မဟသာ vectorization ကိုခလင့်ပဌုပါသည်။
  • ပဌဿနာမျာသကိုခဌေရာခံရန်နဟင့် uninitialized variables မျာသအသုံသပဌုမဟုနဟင့်ဆက်စပ်နေသော အာသနည်သချက်မျာသကိုပိတ်ဆို့ရန်အတလက် stack ပေါ်ရဟိ variable မျာသကို ရဟင်သလင်သပဌတ်သာသစလာ အစပဌုခဌင်သအာသ ဖလင့်ရန်အတလက် "-ftrivial-auto-var-init" မုဒ်ကို ထည့်သလင်သထာသသည်။
  • C နဟင့် C++ ဘာသာစကာသမျာသအတလက်၊ Clang မဟ အလာသတူလုပ်ဆောင်ချက်တစ်ခုနဟင့် တလဲဖက်အသုံသပဌုနိုင်သော အရာတစ်ခု၏အရလယ်အစာသကို ဆုံသဖဌတ်ရန် __builtin_dynamic_object_size ကို ထည့်သလင်သထာသပါသည်။
  • C နဟင့် C++ ဘာသာစကာသမျာသအတလက်၊ “မရရဟိနိုင်ပါ” ရည်ညလဟန်သချက်အတလက် ပံ့ပိုသမဟုကို ပေါင်သထည့်လိုက်ပါပဌီ (ဥပမာ၊ သင်အသုံသပဌုရန်ကဌိုသစာသပါက အမဟာသတစ်ခုဖန်တီသပေသမည့် လုပ်ဆောင်ချက်မျာသကို အမဟတ်အသာသပဌုနိုင်သည်)။
  • C နဟင့် C++ ဘာသာစကာသမျာသအတလက် “#elifdef” နဟင့် “#elifndef” လမ်သညလဟန်ချက်မျာသကို ကဌိုတင်လုပ်ဆောင်ခဌင်သအတလက် ပံ့ပိုသမဟုကို ထည့်သလင်သထာသသည်။
  • UTF-8 စာလုံသမျာသကို လလဲမဟာသစလာအသုံသပဌုပါက သတိပေသချက်ပဌသရန် "-Wbidi-chars" အလံကို ပေါင်သထည့်ထာသပဌီသ၊ လမ်သကဌောင်သနဟစ်ကဌောင်သရဟိသော စာသာသကိုပဌသသည့် အစီအစဥ်ကို ပဌောင်သလဲခဌင်သ။
  • arrays ကိုရည်ညလဟန်သသော operands နဟစ်ခုကို နဟိုင်သယဟဉ်ရန် ကဌိုသပမ်သသောအခါ သတိပေသချက်ပဌသရန် "-Warray-compare" အလံကို ပေါင်သထည့်ထာသသည်။
  • Multi-core နဟင့် hybrid (CPU+GPU/DSP) စနစ်မျာသ မျဟဝေထာသသော memory နဟင့် vectorization ယူနစ်မျာသ (SIMD) တလင် အပဌိုင်ပရိုဂရမ်သမင်သနည်သလမ်သမျာသကို အသုံသပဌုရန်အတလက် API နဟင့် နည်သလမ်သမျာသကို သတ်မဟတ်ပေသသည့် OpenMP 5.0 နဟင့် 5.1 (Open Multi-Processing) စံနဟုန်သမျာသကို အကောင်အထည်ဖော်ခဌင်သ , ဆက်သည်။
  • GPU မျာသနဟင့် NVIDIA PTX ကဲ့သို့သော အထူသပဌုပရိုဆက်ဆာမျာသပေါ်တလင် လုပ်ဆောင်ချက်မျာသကို ဖယ်ရဟာသခဌင်သအတလက် ကိရိယာမျာသကို သတ်မဟတ်ပေသသည့် OpenACC 2.6 အပဌိုင်ပရိုဂရမ်သမင်သသတ်မဟတ်ချက်ကို ပိုမိုကောင်သမလန်အောင် အကောင်အထည်ဖော်ခဌင်သ။
  • တိုသချဲ့ညလဟန်ကဌာသချက်မျာသအတလက် Intel AVX86-FP512 နဟင့် _Float16 အမျိုသအစာသကို x16 ဗိသုကာအတလက် ကုဒ်မျိုသဆက်နောက်ကလယ်တလင် ထည့်သလင်သထာသသည်။
  • x86 ဗိသုကာအတလက်၊ ခဌလင်သချက်မရဟိ ရဟေ့သို့ခုန်ခဌင်သလုပ်ဆောင်ပဌီသနောက် ခဌလင်သချက်မရဟိ ရဟေ့သို့ခုန်ခဌင်သလုပ်ဆောင်ပဌီသနောက် ညလဟန်ကဌာသချက်မျာသကို မဟန်သဆလုပ်ဆောင်ခဌင်သကဌောင့် ဖဌစ်ပေါ်လာသော ပရိုဆက်ဆာမျာသတလင် အာသနည်သချက်မျာသကို အကာအကလယ်ထည့်သလင်သထာသသည်။ မဟတ်ဉာဏ်ရဟိ ဌာနခလဲညလဟန်ကဌာသချက်မျာသ (SLS၊ Straight Line Speculation) အပဌီသတလင် ညလဟန်ကဌာသချက်မျာသကို ကဌိုတင်လုပ်ဆောင်ခဌင်သမျာသကဌောင့် ပဌဿနာဖဌစ်ပေါ်ပါသည်။ အကာအကလယ်ကိုဖလင့်ရန်၊ “-mharden-sls” ရလေသချယ်မဟုကို အဆိုပဌုထာသသည်။
  • စမ်သသပ်ဆဲတည်ငဌိမ်မဟုခလဲခဌမ်သစိတ်ဖဌာမဟုတလင် uniinitialized variables မျာသအသုံသပဌုမဟုကို ထောက်လဟမ်သမဟုကို ပေါင်သထည့်ထာသသည်။ inline ထည့်သလင်သမဟုမျာသတလင် စုဝေသမဟုကုဒ်ကို ပိုင်သခဌာသစိတ်ဖဌာခဌင်သအတလက် ကနညသပံ့ပိုသမဟု ပေါင်သထည့်ထာသသည်။ မဟတ်ဉာဏ်ခဌေရာခံခဌင်သကို တိုသတက်စေသည်။ ခလုတ်အသုံသအနဟုန်သမျာသကို လုပ်ဆောင်ရန်အတလက် ကုဒ်ကို ပဌန်လည်ရေသသာသပဌီသဖဌစ်သည်။
  • ကုဒ်ထုတ်လုပ်သူအာသ အခဌာသလုပ်ငန်သစဉ်မျာသတလင် ထည့်သလင်သရန်နဟင့် JIT မဟ bytecode ကို စက်ကုဒ်သို့ စုစည်သရန်အတလက် မျဟဝေထာသသော စာကဌည့်တိုက်တစ်ခုဖဌစ်သည့် libgccjit သို့ ခေါ်ဆိုမဟုအသစ် 30 ခုကို ပေါင်သထည့်ခဲ့သည်။
  • CO-RE (Compile Once - Run Everywhere) အတလက် ပံ့ပိုသမဟုအာသ BPF bytecode ထုတ်ပေသရန်အတလက် backend တလင် ထည့်သလင်သထာသပဌီသ၊ ၎င်သသည် Linux kernel အတလက် eBPF ပရိုဂရမ်မျာသ၏ ကုဒ်မျာသကို တစ်ကဌိမ်သာ စုစည်သနိုင်ပဌီသ ၎င်သကို လိုက်လျောညီထလေဖဌစ်စေမည့် အထူသ universal loader ကို အသုံသပဌုပါ။ ပရိုဂရမ်ကို လက်ရဟိ kernel နဟင့် BPF အမျိုသအစာသမျာသဖော်မတ်သို့ တင်ထာသသည်)။ CO-RE သည် စုစည်သထာသသော eBPF ပရိုဂရမ်မျာသ၏ သယ်ဆောင်ရလလယ်ကူမဟုပဌဿနာကို ဖဌေရဟင်သပေသသည်၊ ၎င်သသည် ယခင်က ၎င်သတို့စုစည်သထာသသော kernel ၏ဗာသရဟင်သတလင်သာ အသုံသပဌုနိုင်သည့်ပဌဿနာကို ဖဌေရဟင်သပေသသည်၊ ဒေတာဖလဲ့စည်သပုံမျာသရဟိ ဒဌပ်စင်မျာသ၏အနေအထာသသည် ဗာသရဟင်သမဟဗာသရဟင်သသို့ပဌောင်သသလာသသောကဌောင့်ဖဌစ်သည်။
  • RISC-V နောက်ခံအစလန်သည် ညလဟန်ကဌာသချက်အစုံဗိသုကာအဆက်အသစ်မျာသအတလက် zba၊ zbb၊ zbc နဟင့် zbs အပဌင် vector နဟင့် scalar cryptographic operations အတလက် ISA extensions မျာသကို ပံ့ပိုသပေသပါသည်။ မူရင်သအာသဖဌင့်၊ RISC-V ISA 20191213 သတ်မဟတ်ချက်အတလက် ပံ့ပိုသမဟုကို ပံ့ပိုသပေသပါသည်။ T-HEAD c906 cores အတလက် ကောင်သမလန်အောင်လုပ်ဆောင်နိုင်စေရန် -mtune=thead-c906 အလံကို ပေါင်သထည့်ထာသပါသည်။
  • __int128_t/integer(kind=16) အမျိုသအစာသအတလက် ပံ့ပိုသမဟုအာသ GCN microarchitecture ကို အခဌေခံ၍ AMD GPUs အတလက် ကုဒ်မျိုသဆက် နောက်ကလယ်တလင် ထည့်သလင်သထာသပါသည်။ ကလန်ပဌူတာယူနစ် (CU) တစ်ခုလျဟင် အလုပ်အဖလဲ့ 40 အထိနဟင့် ညလဟန်ကဌာသချက်မျက်နဟာစာ 16 ခုအထိ (wavefront၊ အုပ်စုတစ်ခုလျဟင် SIMD အင်ဂျင်ဖဌင့် အပဌိုင်လုပ်ဆောင်သည့် threads အစုံ) ကို အသုံသပဌုနိုင်သည်။ ယခင်က CU တစ်ခုလျဟင် ညလဟန်ကဌာသချက်အစလန်သတစ်ခုသာ ခလင့်ပဌုခဲ့သည်။
  • NVIDIA PTX (Parallel Thread Execution) ညလဟန်ကဌာသချက်အစုံဗိသုကာကို အသုံသပဌု၍ ကုဒ်ကိုထုတ်လုပ်ရန် ဒီဇိုင်သထုတ်ထာသသည့် NVPTX နောက်ခံလူသည် “-march”၊ “-mptx” နဟင့် “-march-map” အလံမျာသကို အသုံသပဌုနိုင်စလမ်သကို ပေါင်သထည့်ထာသသည်။ PTX ISA sm_53၊ sm_70၊ sm_75 နဟင့် sm_80 အတလက် ပံ့ပိုသမဟုကို အကောင်အထည်ဖော်ခဲ့သည်။ မူရင်သတည်ဆောက်ပုံသည် sm_30 ဖဌစ်သည်။
  • PowerPC / PowerPC64 / RS6000 ပရိုဆက်ဆာမျာသအတလက် နောက်ကလယ်တလင်၊ built-in လုပ်ဆောင်ချက်မျာသကို အကောင်အထည်ဖော်မဟုမျာသကို ပဌန်လည်ရေသသာသထာသသည်။ built-in လုပ်ဆောင်ချက်မျာသ __builtin_get_texasr၊ __builtin_get_texasru၊ __builtin_get_tfhar၊ __builtin_get_tfiar၊ __builtin_set_texasr၊ __builtin_set_texasru၊ __builtin_set_set_ett.
  • Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) နဟင့် Arm Cortex-X710 (cortex- x2) အတလက် ပံ့ပိုသမဟု။ "-march" ရလေသချယ်မဟုဖဌင့်အသုံသပဌုရန်အတလက် ARMv2 ဗိသုကာရလေသချယ်မဟုမျာသအသစ်အတလက် ပံ့ပိုသမဟုထပ်ထည့်သည်- armv8-a၊ armv8.7-a၊ armv8.8-a။ တိုသချဲ့ ARM ညလဟန်ကဌာသချက် (ls9) ကိုအသုံသပဌုမဟုအပေါ် အခဌေခံ၍ အနုမဌူဗုံသတင်ခဌင်သနဟင့် ဒေတာသိမ်သဆည်သခဌင်သအတလက် ကလန်ပဌူလာ (Intrinsics) တလင် ထည့်သလင်သထာသသော C လုပ်ဆောင်ချက်မျာသကို ထည့်သလင်သထာသသည်။ mopsoption ARM တိုသချဲ့မဟုကို အသုံသပဌု၍ memcpy၊ memmove နဟင့် memset လုပ်ဆောင်ချက်မျာသကို အရဟိန်မဌဟင့်ရန်အတလက် ပံ့ပိုသမဟု ထပ်ထည့်ထာသသည်။
  • စစ်ဆေသခဌင်သမုဒ်အသစ် “-fsanitize=shadow-call-stack” (ShadowCallStack) ကို AArch64 ဗိသုကာလက်ရာအတလက်သာ လက်ရဟိရရဟိနိုင်ပဌီသ “-ffixed-r18” ရလေသချယ်မဟုဖဌင့် တည်ဆောက်သည့်ကုဒ်တလင် အလုပ်လုပ်သည့်အခါတလင် ထည့်သလင်သထာသသည်။ မုဒ်သည် stack တလင်ကဌာသခံမျာသလျဟံနေချိန်တလင် function တစ်ခုမဟပဌန်လာသောလိပ်စာကိုထပ်ရေသခဌင်သမဟကာကလယ်ပေသသည်။ ကာကလယ်မဟု၏ အနဟစ်သာရမဟာ ထိန်သချုပ်မဟုကို လုပ်ဆောင်ချက်တစ်ခုသို့ လလဟဲပဌောင်သပဌီသ လုပ်ဆောင်ချက်မဟ မထလက်ခလာမီ ကလိပ်စာကို ပဌန်လည်ရယူပဌီသနောက် သီသခဌာသ "အရိပ်" အကလက်တစ်ခုတလင် ပဌန်လာမည့်လိပ်စာကို သိမ်သဆည်သရန်ဖဌစ်သည်။

source: opennet.ru

မဟတ်ချက် Add