EGCS je novß v²vojovß v∞tev GNU p°ekladaΦe. Od ,,oficißlnφ'' verze GCC se li╣φ ve v²vojovΘm modelu. GCC pou╛φvß katedrßlnφ model - k v²vojov²m verzφm p°ekladaΦe mß p°φstup pouze omezenß skupina v²vojß°∙ (ka╛d², kdo se takov²m v²vojß°em chce stßt, musφ se p°ihlßsit do mailing listu apod.). Ostatnφ majφ p°φstup pouze k poslednφ stabilnφ verzi p°ekladaΦe.
O verzi 2 GCC se starß Richard Kenner. Ten ale velmi dlouhou dobu nevydal novou verzi. (verze 2.7.2 byla vydßva v roce 95 a verze 2.8.0 a╛ v prosinci 97). P°esto, ╛e GCC i ve dva roky starΘ verzi bylo schopnΘ konkurovat ostatnφm nov∞j╣φm p°ekladaΦ∙m, n∞kterΘ v∞ci chyb∞ly. A╛ do konce roku 97 GCC nepodporovalo optimalizace pro Pentia, GPP u╛ neodpovφdalo nejnov∞j╣φm draft∙m standardu C++ a m∞lo problΘmy s podporou templates.
Mnoha lidem to vadilo. Vznikl nap°φklad projekt vytvß°ejφcφ PentiovΘ GCC optimalizace (PGCC), kter² zaΦal sßm Intel ale pozd∞ji to vzdal, proto╛e PGCC bylo velmi nestabilnφ. Bylo mnoho spor∙ na mailing listech a zaΦalo se diskutovat o zm∞n∞ v²vojovΘho modelu na otev°en². V otev°enΘm modelu mß k v²vojov²m verzφm p°φstup ka╛d². A i o za°azovßnφ zm∞n do oficiφlnφch zdrojov²ch k≤d∙ se m∙╛e starat vφce lidφ. To umo╛nφ, aby vφce lidφ otestovalo v²vojovΘ verze a zapojilo se do v²voje. Tento model pou╛φvß nap°φklad jßdro Linuxu. Odp∙rci otev°enΘho modelu ale °φkali, ╛e GCC je velmi komplikovan² program a je velmi snadnΘ do n∞j zanΘst chyby, kterΘ se pak budou ╣patn∞ hledat, a nebo n∞kterΘ v∞ci naprogramovat tak, ╛e pozd∞ji p°inesou mnoho komplikacφ. Katedrßlnφ v²vojov² model funguje spolehliv∞ u mnoha projekt∙ (nap°φklad FreeBSD).
A proto vzniklo EGCS, kterΘ pou╛φvß otev°en² v²vojov² model. O jeho v²voj se starß skupina programßtor∙ z Cygnusu. EGCS vychßzφ z v²vojovΘ verze 2.8.0 a jsou do n∞j p°idßvßny v∞echny zm∞ny z v²voje GCC. Navφc je ale otev°en∞j╣φ radikßln∞j╣φm zm∞nßm (jako jsou novΘ optimalizace apod.), kterΘ mohou doΦasn∞ znestabilnit p°ekladaΦ. Verze 1.0 je z prosince 97 a obsahuje nßsledujφcφ zm∞ny oproti GCC:
-f_stack_check
(kontrola p°eteΦenφ zßsobnφku na
architekturßch, kde nenφ hlφdßn automaticky), -Wundef
, -Wno-undef
(varuje o pou╛φvßnφ nedefinovan²ch symbol∙ v #if
),
-Wimplicit
(varuje o pou╛φvßnφ deklaracφ (jako register i
)),
-Wsign-compare
(varuje o porovnßnßnφ signed a unsigned hodnot)V p°φ╣tφch verzφch EGCS se plßnuje za°azenφ nekter²ch zm∞n z PGCC (lep╣φ
podpora Riscov²ch architectur) a lep╣φ
podpora superskalßrnφch procesor∙. GCC nebylo navrhovßno pro superskalßrnφ
procesory a jeho popis architektury je neumo╛≥uje sprßvn∞ popsat.
Superskalßrnφ procesory se vyznaΦujφ tφm, ze majφ vφce pipeline a tak mohou
zpracovat vφce instrukcφ zßrove≥. ProblΘm ale je, ╛e ne ka╛dß pipeline
podporuje v╣echno. Nap°φklad na Pentiu je pipeline U a V, kde pipeline V
podporuje pouze ,,jednoduchΘ'' instrukce - nap°φklad add
, ale neumφ
nap°φklad instrukce s prefixem. U nov∞j╣φch procesor∙ je situace je╣t∞
komplikovan∞j╣φ. Navφc v p°φpad∞, ╛e jedna pipeline zpracovßvß hodnotu, kterou
pot°ebuje instrukce v jinΘ pipeline, musφ druhß pipeline poΦkat. A tak hodn∞
zßle╛φ na tom, jak je k≤d se°azen. O sprßvnΘ se°azenφ k≤du se starß scheduler.
Nejednß se ale pouze ale o p°erovnßnφ instrukcφ. N∞kdy se vyplatφ vygenerovat
·pln∞ jin² k≤d. Proto mß scheduler vφce pr∙chod∙. Scheduler v GCC nebyl
navrhovßn pro takto komplikovanou situaci a tak nepodßvß nejlep╣φ v²sledky.
EGCS obsahuje nov² experimentßlnφ scheduler Haifa. Ten mß nov² pr∙chod po
alokaci registr∙. Umφ take interblock scheduling a dal╣φ vymo╛enosti. ProblΘm
ale je, ╛e jeho v²sledky zatφm nejsou spolehlivΘ. Na n∞kter²ch architekturßch
tento scheduler zrychluje (HP-PA) na jin²ch (Intel) jsou jeho vysledky
r∙znorodΘ a n∞kde zpomaluje. ╚asteΦn∞ je to zp∙sobeno tφm, ╛e nenφ je╣t∞
sprßvn∞ dolad∞n a takΘ tφm, ╛e machine description neumpo╛≥uje sprßvny popis
t∞chto procesor∙ a tak jsou napsßny tak, ╛e sice ΦßsteΦn∞ p°ekladaΦi l╛ou ale
podßvajφ v∞t╣inou dobrΘ v²sledky. S Haifa schedulerem se ale situace zm∞nila a
tak tyto machine description budou muset b²t p°epsßny.
Plßnuje se i mnoho dal╣φch zm∞n a tak se ob∞ verze budou asi stßle vzdalovat a
Φas ukß╛e, kter² z p°φstup∙ je lep╣φ. Domßcφ strßnka EGCS se nachßzφ na
www.cygnus.com/egcs
Dotazy a p°ipomφnky ohledn∞ strßnky posφlejte na hubicka@paru.cas.cz