https://www.altlinux.org/api.php?action=feedcontributions&user=A1batross&feedformat=atomALT Linux Wiki - Вклад [ru]2024-03-29T09:46:16ZВкладMediaWiki 1.38.2https://www.altlinux.org/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:A1batross&diff=55609Участник:A1batross2021-08-22T20:28:15Z<p>A1batross: </p>
<hr />
<div>Тут буду складировать заметки по Эльбрусу, которые когда-нибудь, может быть, не уверен, но перерастут во что-то большее.<br />
<br />
Не все обязательно являются правдой в последней инстанции, так как получены в основном из работы с машиной по SSH и чтением исходных кодов ядра.<br />
<br />
=== syscall 12 ===<br />
<br />
Принимает только 1 аргумент -- 64-битный указатель на bootblock. sys_num, похоже, всегда равен 0.<br />
<br />
<code><br />
{<br />
<br />
addd 0, 0, %b[0]<br />
<br />
addd 0, bootblock, %b[1]<br />
<br />
sdisp %ctpr1, 12<br />
<br />
}<br />
<br />
call %ctpr1, wbs = 5<br />
<br />
</code><br />
<br />
=== Elbrus PCI ===<br />
<br />
IOHub из себя представляет PCI шину, к которой подключены мосты, уже к которым подключаются сами устройства. Получается такая древовидная структура. Встроенные в мост или SoC висят на первой шине и являются Conventional PCI устройствами, к второй подключается PCI-Express.<br />
<br />
==== PCI config ====<br />
<br />
Доступ к конфигурации осуществляется через адресное пространство, базовый адрес которого получаем из чтения регистра SIC_rt_pcicfgb(0x90). Адресное пространство имеет ширину в 28 бит, поэтому в него кодируются следующие данные:<br />
<br />
* 0:11 заняты адресом регистра PCI устройства.<br />
* 12:19 занят devfn.<br />
* 20:27 занят номером шины.</div>A1batrosshttps://www.altlinux.org/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:A1batross&diff=55608Участник:A1batross2021-08-22T20:27:33Z<p>A1batross: Добавил про PCI</p>
<hr />
<div>Тут буду складировать заметки по Эльбрусу, которые когда-нибудь, может быть, не уверен, но перерастут во что-то большее.<br />
<br />
=== syscall 12 ===<br />
<br />
Принимает только 1 аргумент -- 64-битный указатель на bootblock. sys_num, похоже, всегда равен 0.<br />
<br />
<code><br />
{<br />
<br />
addd 0, 0, %b[0]<br />
<br />
addd 0, bootblock, %b[1]<br />
<br />
sdisp %ctpr1, 12<br />
<br />
}<br />
<br />
call %ctpr1, wbs = 5<br />
<br />
</code><br />
<br />
=== Elbrus PCI ===<br />
<br />
IOHub из себя представляет PCI шину, к которой подключены мосты, уже к которым подключаются сами устройства. Получается такая древовидная структура. Встроенные в мост или SoC висят на первой шине и являются Conventional PCI устройствами, к второй подключается PCI-Express.<br />
<br />
==== PCI config ====<br />
<br />
Доступ к конфигурации осуществляется через адресное пространство, базовый адрес которого получаем из чтения регистра SIC_rt_pcicfgb(0x90). Адресное пространство имеет ширину в 28 бит, поэтому в него кодируются следующие данные:<br />
<br />
* 0:11 заняты адресом регистра PCI устройства.<br />
* 12:19 занят devfn.<br />
* 20:27 занят номером шины.</div>A1batrosshttps://www.altlinux.org/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:A1batross&diff=55561Участник:A1batross2021-08-19T16:05:15Z<p>A1batross: /* syscall 12 */</p>
<hr />
<div>Тут буду складировать заметки по Эльбрусу, которые когда-нибудь, может быть, не уверен, но перерастут во что-то большее.<br />
<br />
=== syscall 12 ===<br />
<br />
Принимает только 1 аргумент -- 64-битный указатель на bootblock. sys_num, похоже, всегда равен 0.<br />
<br />
<code><br />
{<br />
<br />
addd 0, 0, %b[0]<br />
<br />
addd 0, bootblock, %b[1]<br />
<br />
sdisp %ctpr1, 12<br />
<br />
}<br />
<br />
call %ctpr1, wbs = 5<br />
<br />
</code></div>A1batrosshttps://www.altlinux.org/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:A1batross&diff=55560Участник:A1batross2021-08-19T16:04:46Z<p>A1batross: </p>
<hr />
<div>Тут буду складировать заметки по Эльбрусу, которые когда-нибудь, может быть, не уверен, но перерастут во что-то большее.<br />
<br />
=== syscall 12 ===<br />
<br />
Принимает только 1 аргумент -- 64-битный указатель на bootblock. sys_num, похоже, всегда равен 0.<br />
<br />
<code><br />
{<br />
addd 0, 0, %b[0]<br />
addd 0, bootblock, %b[1]<br />
sdisp %ctpr1, 12<br />
}<br />
call %ctpr1, wbs = 5<br />
</code></div>A1batrosshttps://www.altlinux.org/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:A1batross&diff=55557Участник:A1batross2021-08-19T12:07:33Z<p>A1batross: Создал страницу</p>
<hr />
<div>Тут буду складировать заметки по Эльбрусу, которые когда-нибудь может быть не уверен, но перерастут во что-то большее.</div>A1batrosshttps://www.altlinux.org/index.php?title=%D0%AD%D0%BB%D1%8C%D0%B1%D1%80%D1%83%D1%81/%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&diff=53234Эльбрус/портирование2021-03-21T17:43:20Z<p>A1batross: /* отсутствие cpuid.h */</p>
<hr />
<div>= Перенос ПО на платформу Эльбрус =<br />
<br />
При сборке существующих программ порой возникает ряд типичных проблем и вопросов, которые отчасти систематизированы ниже (см. тж. [[эльбрус/lcc|страничку по компилятору]]).<br />
<br />
В [[spec|ALT RPM]] реализован макрос <tt>%e2k</tt>, рекомендуемый к применению в <tt>%ifarch</tt>.<br />
<br />
<div id="configure"></div><br />
== configure: error: cannot guess build type; you must specify one ==<br />
<br />
В архив исходников программы включены устаревшие копии этих файлов, [[эльбрус/upstream|поддержка e2k]] добавлена в [https://lists.gnu.org/archive/html/config-patches/2015-03/msg00000.html gnu-config] в 2015 году; достаточно обновить их вручную из свежей системной версии этого пакета или {{pkg|automake}} (который с большей вероятностью окажется под рукой) либо выполнить {{cmd|autoreconf -fisv}}:<br />
<br />
cp -aLt . -- /usr/share/automake/config.{guess,sub}<br />
<br />
В %changelog можно добавить, например<ref>поскольку затрагивает и riscv64, и обычно aarch64</ref>:<br />
<br />
- fix build on newer arches<br />
<br />
<div id="64LE"></div><br />
== тесты на порядок байтов/битность ==<br />
<br />
Нередко попадаются программы, которые интересует только длина указателей (размер integer) и, возможно, endianness; поскольку e2k -- [[эльбрус/архитектура|64-разрядная LE-архитектура]], ищем подстроку вроде <tt>__amd64__</tt>, читаем контекст, добавляем аналогично <tt>__e2k__</tt>.<br />
<br />
В альтовых пакетах на cmake исправления проверок битности порой выглядят примерно так<ref>либо можно задействовать <tt>%_libsuff</tt></ref>:<br />
<br />
-%ifarch x86_64<br />
+%if "%_lib" == "lib64"<br />
export LIB_SUFFIX=64<br />
%endif<br />
<br />
- fixed build on 64-bit architectures<br />
<br />
В проектах на boost порой попадается тот [https://www.gnu.org/software/autoconf-archive/ax_boost_base.html {{path|ax_boost_base.m4}}], где в тест на lib64 забит список архитектур; его придётся поправить перед запуском {{cmd|autoreconf}}<ref>или найти этот фрагмент в уже сгенерированном configure, что несколько сложней</ref> как-то так:<br />
<br />
%ifarch %e2k ppc64le riscv64<br />
sed -i 's,aarch64,&|riscv64|ppc64le|e2k,' m4/ax_boost_base.m4<br />
%endif<br />
<br />
Про невыровненный доступ к памяти на версиях архитектуры [http://ftp.altlinux.org/pub/people/mike/elbrus/docs/elbrus_prog/html/chapter6.html#reference-prefetch до пятой включительно] ("Эльбрус-8СВ"<!-- http://sdelanounas.ru/blogs/136426/ -->) известно, что он [http://ftp.altlinux.org/pub/people/mike/elbrus/docs/elbrus_prog/html/chapter9.html#id6 достаточно дорогой]; поэтому про unaligned access интересующемуся коду можно сообщить, что таковой отсутствует.<br />
<br />
== SIMD ==<br />
<!-- 2291, А.Т. --><br />
Алгоритм портирования таких программ простой:<br />
# ищем в исходниках макрос <tt>__x86_64__</tt><ref>или же <tt>__amd64__</tt></ref> или на худой конец <tt>i386</tt>; если они покрывают фрагменты кода с SIMD-интринсиками (функции, имена которых начинаются на <tt>_mm_</tt>), то нам повезло;<br />
# заменяем <tt>defined __x86_64__</tt> на <tt>defined __x86_64__ || defined __e2k__</tt>;<br />
# если попадается динамическая проверка наличия MMX/SSE, то указываем, что у нас всё есть до SSE4.1<ref>расширения системы команд SSE4.2 и AVX1 в каком-то виде также поддержаны в компиляторе, но, возможно, быстрее не будет</ref>;<br />
# к asm-вставкам нужно творчески подходить, но чаще проще готовый generic-вариант кода использовать.<br />
<br />
См. тж. проект [https://github.com/simd-everywhere/simde/pull/700 SIMD Everywhere].<br />
{{note|несмотря на некоторую аппаратную поддержку выполнения SIMD-инструкций, по сути они реализуются в компиляторе и осмысленность задействования может отличаться от проекта к проекту -- возможно замедление, особенно на AVX* и [[эльбрус/архитектура|архитектурах]] ранее e2kv5.}}<br />
<br />
== компилятор/архитектура==<br />
Имейте в виду при выписывании <tt>#ifdef</tt>:<br />
* __e2k__ — это архитектура, <br />
* __LCC__ — компилятор.<br />
<br />
Во-первых, lcc есть не только для e2k (привет sparc), поэтому если делается патч под особенности lcc (и, вероятнее всего, фронтенда edg), то правильнее использовать __LCC__ .<br />
<br />
Во-вторых, со временем на e2k могут появится и другие компиляторы, например, clang через соответствующий бэкенд на основе lcc. И у них уже может не быть макроса __LCC__ , а вот __e2k__ будет.<br />
<br />
Поэтому мне представляется правильным архитектурно-зависимые изменения в e2k заворачивать, а компиляторо-зависимые в LCC. Понятно, что в реальной жизни их отличить не всегда просто. - @bircoph<br />
<!-- А мб лучше не __LCC__ , а __LCC_MCST__ ) // ну это точно не сюда... mike@ --><br />
<br />
<div id="makecontext"></div><br />
<br />
== отсутствие makecontext() ==<br />
<!-- 2320, А.Ф.; 5696, Д.К. --><br />
На Эльбрусах <tt>makecontext_e2k()</tt> выделяет память под дополнительные стеки, поэтому если просто заменить <tt>s/makecontext/makecontext_e2k/</tt>, в программе может появиться утечка памяти. Нужно ещё поставить вызов <tt>freecontext_e2k()</tt> там, где выделенный для <tt>makecontext_e2k()</tt> <tt>ucp.uc_stack</tt> перестаёт использоваться под данный контекст, т.е. где:<br />
# <tt>ucp.uc_stack</tt> освобождается через <tt>free()</tt>;<br />
# <tt>ucp.uc_stack</tt> переиспользуется, например, под другой контекст.<br />
<br />
Должна стоять проверка на makecontext < 0: makecontext_e2k() возвращает значение int, а не void. Значение вызова необходимо проверять на статус ошибки (< 0).<br />
<br />
Если речь про coroutines, надо уходить с fcontext на портабельную вещь, поддерживающую ucontext-e2k (например, [https://github.com/taisei-project/koishi koishi]). <!-- со слов Игоря Молчанова по мотивам упоминания проблемы сборки kicad --><br />
<br />
<div id="cpuid"></div><br />
<br />
== отсутствие cpuid.h ==<br />
<br />
Обуславливаем соответствующий <tt>#include</tt> и обращения к функциям так:<br />
#if defined(__i386__) || defined(__x86_64__)<br />
...не забывая добавить подходящую по смыслу заглушку вместо результата функции.<br />
<br />
При необходимости подробного различения процессоров "Эльбрус" обратите внимание на <tt>__builtin_cpu_is()</tt>; в [[lcc]] от 1.23.23 и 1.24.10 должны быть доступны более удобные <tt>__builtin_cpu_name()</tt> и <tt>__builtin_cpu_arch()</tt> (#4484).<br />
<br />
Есть альтернативный способ -- через чтение регистра IDR, что позволяет определить модель процесса если код скомпилирован под другой процессор и даже если недоступен <tt>/proc/cpuinfo</tt>.<br />
Для него написана [https://git.mentality.rip/OpenE2K/e2k-libs/src/branch/master/cpuid/e2k_cpuid.h маленькая библиотека под WTFPL].<br />
<br />
<div id="sigsegv"></div><br />
<br />
== SIGILL вместо ожидаемого сигнала ==<br />
Обратите внимание, что на e2k в некоторых случаях можно получить SIGILL (Illegal instruction) вместо ожидаемого SIGSEGV (Segmentation fault), SIGBUS (Bus error) или SIGFPE (Floating point exception).<br />
<br />
Не тот сигнал приходит, как правило, либо в результате работы оптимизаций, либо при ручном написании кода на ассемблере или ассемблерных вставках. Если по каким-то причинам нужно поймать именно тот сигнал, который бы поймался на других архитектурах, то следует использовать режим с отключением оптимизаций, задействующих полуспекулятивный режим исполнения:<br />
* <tt>-O0</tt> -- режим компиляции без оптимизаций;<br />
* <tt>-O1</tt> -- минимальный набор оптимизаций;<br />
* <tt>-fcontrol-spec</tt> -- запрет полуспекулятивных обращений к памяти (для сохранения сингалов SIGSEGV и SIGBUS);<br />
* <tt>-fno-fp-spec</tt> -- запрет полуспекулятивных вещественных операций (для сохранения сигнала SIGFPE).<br />
<br />
См. тж. [http://ftp.altlinux.org/pub/people/mike/elbrus/docs/elbrus_prog/html/chapter2.html#sigill Руководство] и {{path|posix_signals.html}}<ref>в составе {{pkg|lcc1.25-doc}} или аналогичного пакета на ОС Альт, по пути {{path|/opt/mcst/doc/posix_signals.html}} при установленной системе программирования в Эльбрус Линукс</ref>.<br />
<br />
= Ссылки =<br />
* '''[[эльбрус/lcc]]'''<br />
* '''[http://ftp.altlinux.org/pub/people/mike/elbrus/docs/elbrus_prog/html/chapter3.html Руководство по эффективному программированию на платформе «Эльбрус». 3. Отличия в интерфейсах]'''<br />
* Доклады из серии [http://0x1.tv/Категория:ALTLinux_на_Эльбрусе ALT на e2k]:<br />
** [https://lvee.org/ru/abstracts/303 Free software porting on the Elbrus architecture]<br />
** [http://0x1.tv/20190827B Особенности портирования СПО на Эльбрус] (Андрей Савченко, OSSDEVCONF-2019)<br />
* Портирование Embox: <br />
** [https://habr.com/ru/company/embox/blog/421441/ Embox начинает восхождение на Эльбрус 2018], <br />
** [https://habr.com/ru/company/embox/blog/447704/ Восхождение на Эльбрус — Разведка боем. Техническая Часть 1. Регистры, стеки и другие технические детали 2019],<br />
** [https://habr.com/ru/company/embox/blog/447744/ Восхождение на Эльбрус — Разведка боем. Техническая Часть 2. Прерывания, исключения, системный таймер 2019]<br />
** [https://habr.com/ru/company/embox/blog/485694/ Embox на процессоре Эльбрус. Или никогда не забывайте о том, что получили при разведке 2020]<br />
* [http://jug.ru/talks/jbreak-2016/java-on-elbrus/ Портирование Java на Эльбрус]<br />
* [https://habr.com/ru/company/jugru/blog/419155/ Портирование JS на Эльбрус]<br />
* [https://www.youtube.com/watch?v=f_hwK0zM9y8&t=29m17s Константин Трушкин: ответы на вопросы] (видео)<br />
* [https://www.youtube.com/watch?v=QC2OU5axEDI Yandex Day: 3. Компилятор для процессоров "Эльбрус". Алексей Маркин] (видео)<br />
* [https://www.youtube.com/watch?v=IeT091Ej1lU Yandex Day: 4. Прикладное программирование на Эльбрусе. Антон Аникин] (видео)<br />
* [http://habr.com/ru/company/gaijin/blog/533380/ Как мы переносили современные игры на процессор Эльбрус-8С] (Gaijin Entertainment)<br />
* [http://www.mcst.ru/files/52f220/590cd8/50136e/000004/ishin-loginov-vasilev-uskorenie_vychisleniy_s_ispolzovaniem_vysokoproizvoditelnyh_matematicheskih_i_multimediynyh_bibliotek_dlya_arhitektury_elbrus.pdf Ускорение вычислений с использованием высокопроизводительных математических и мультимедийных библиотек для архитектуры Эльбрус] ([[эльбрус/eml|EML]])<br />
* [http://habr.com/ru/post/535926/ Это непростое условное выполнение]<br />
* [http://forum.elbrus.ru/viewtopic.php?f=48&p=7277 Узкие места производительности Эльбрусов] ''публичный сбор запросов на оптимизацию подсистем''<br />
* [[эльбрус/оптимизация]]<br />
<br />
= Примечания =<br />
<references/><br />
<br />
{{Category navigation|title=E2K|category=E2K|sortkey=*}}<br />
[[Категория:devel]]</div>A1batrosshttps://www.altlinux.org/index.php?title=%D0%AD%D0%BB%D1%8C%D0%B1%D1%80%D1%83%D1%81/upstream&diff=48759Эльбрус/upstream2020-07-06T20:05:26Z<p>A1batross: /* Известные проекты */</p>
<hr />
<div>= Эльбрус вверх по реке =<br />
<br />
Участники ALT Linux Team и наши коллеги приложили некоторые усилия к поддержке e2k [[upstream|напрямую в проектах разработки свободного ПО]]; списки патчей ниже не претендуют на полноту.<br />
<br />
== принятые ==<br />
=== 2015 ===<br />
* [https://lists.gnu.org/archive/html/config-patches/2015-03/msg00000.html gnu-config] ''ldv@''<br />
<br />
=== 2017 ===<br />
* [https://github.com/manisandro/gImageReader/pull/209 gimagereader] ''bircoph@''<br />
* [https://github.com/lxc/lxc/pull/1757/commits/4742cd9a30eadcf3ef637e99e7a357b91f58b41d lxc] ''mike@''<br />
* [https://gitlab.freedesktop.org/gstreamer/gstreamer/commit/9cd8fae44da4b238fb0c26350c1efb99f31cf913 gstreamer] ''mike@''<br />
* [https://gitlab.freedesktop.org/spice/spice-protocol/commit/ed8f30d42199a7ff50e66b0b30e7ee8a628e9f0b spice-protocol] ''mike@''<br />
* [https://github.com/BZFlag-Dev/bzflag/commit/1d6d3a2c52e485ea28cfa2538d91d537b760e1cc bzflag] ''mike@''<br />
* [https://github.com/ruby/ruby/pull/1781 ruby] ''bircoph@''<br />
<br />
=== 2018 ===<br />
* [https://github.com/libtom/libtommath/commit/0bc755139c057286b2c7bbc1d13d6016af94f5de libtommath] ''mike@''<br />
* [https://bugs.freedesktop.org/show_bug.cgi?id=105136 imake] ''bircoph@''<br />
* [https://github.com/karelzak/util-linux/commit/146900d41166efc375d69d7a51f9675dba684f6a util-linux] ''bircoph@''<br />
<br />
=== 2019 ===<br />
* [https://github.com/transmission/transmission/commit/36110e18c4c4728bea3f72702120d6fbcb7b9c09 transmission] ''mike@''<br />
* [https://github.com/nigels-com/glew/commit/61d167422c86735514e713eeea70e0477a979b26 glew] ''mike@''<br />
* [https://pagure.io/sanlock/c/6133e3471ca3dd9214eb4e85cb6fdd4055b92d47 sanlock] ''mike@''<br />
* [https://vcs.pcre.org/pcre/code/trunk/pcrecpp.cc?r1=1752&r2=1751&pathrev=1752 pcre] ''mike@''<br />
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1554616 nss] ''mike@''<br />
* [https://bugs.netsurf-browser.org/mantis/view.php?id=2617 netsurf] ''mike@''<br />
* [https://github.com/google/double-conversion/pull/118 double-conversion] ''mike@''<br />
* [https://www.ginac.de/CLN/cln.git/?p=cln.git;a=commitdiff;h=f5199338401328b97c83d04604451a678b9fd328 cln6] ''mike@''<br />
* [https://github.com/signalwire/freeswitch/pull/50 freeswitch] сделано ''mike@'', заапстримлено ''bircoph@''<br />
<br />
=== 2020 ===<br />
* [https://github.com/gost-engine/engine/pull/217 gost-engine] ''vt@''<br />
* [https://sourceforge.net/p/libemf/patches/3/ libemf] ''mike@''<br />
* [https://github.com/besser82/libxcrypt/pull/102 libxcrypt] ''bircoph@''<br />
<br />
== предложенные ==<br />
* [http://lists.rpm.org/pipermail/rpm-maint/2016-March/004212.html rpm]<br />
* dynamips<br />
* isomd5sum<br />
* libbsd<br />
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1554614 nspr]<br />
* [https://lore.kernel.org/selinux/20191007132020.GG4928@imap.altlinux.org/T/#u selinux]<br />
* simplescreenrecorder<br />
* poco<br />
* xosview<br />
* qucs<br />
* [http://git.altlinux.org/people/lakostis/packages/opus-tools.git?p=opus-tools.git;a=blob_plain;f=opus-tools-0.2-elbrus.patch;h=ba1df0dbf2ab075a4e2f25858544abc124f657b9;hb=HEAD opus-tools]<br />
* [https://gitlab.gnome.org/GNOME/gnome-desktop/-/issues/142 gnome-desktop]<br />
<br />
<div id="mcst"></div><br />
<br />
== патчи МЦСТ ==<br />
* [https://www.sourceware.org/ml/binutils/2008-06/msg00095.html binutils] ''2008''<br />
* meson ''[https://github.com/mesonbuild/meson/pull/3115 2018], [https://github.com/mesonbuild/meson/pull/6455 2020]''<br />
* [https://github.com/smxi/inxi/issues/197 inxi] ''2019; также спасибо {{man|mikhailnov}}''<br />
* taisei: [https://github.com/taisei-project/taisei/blob/9e7cbaf2524d3d2b4034512246a1cea8fb5dbb89/src/credits.c#L119 патчей много], [https://github.com/taisei-project/taisei/pull/157 основной блок] ''2016-2020''<br />
* dosbox-x: ''[https://github.com/joncampbell123/dosbox-x/pull/1613 2020]''<br />
<br />
<div id="eltex"></div><br />
<br />
== патчи Eltex ==<br />
* [https://github.com/erlang/otp/pull/1491/commits/42955cbdf3b4e2f378602e16cb373970d2ac5749 erlang] ''2017''<br />
<br />
<div id="yandex-museum"></div><br />
<br />
== патчи Рамиля Саттарова, Дмитрия Пугачёва и EntityFX ==<br />
* [https://github.com/RobertBeckebans/RBDOOM-3-BFG/pull/432 RobertBeckebans/RBDOOM-3-BFG]<br />
* [https://github.com/OpenArena/engine/commits?author=r-a-sattarov OpenArena/engine]<br />
* [https://github.com/ioquake/ioq3/pull/434 ioquake/ioq3]<br />
* [https://github.com/curl/curl/commit/8063c32209df2d8a90f0ad488188e7a9591db9c2 curl/curl]<br />
* [https://github.com/premake/premake-core/pull/1365 premake/premake-core]<br />
* [https://github.com/ptitSeb/Serious-Engine/pull/13 ptitSeb/Serious-Engine]<br />
* [https://github.com/castano/nvidia-texture-tools/pull/304 castano/nvidia-texture-tools]<br />
* [https://github.com/urho3d/Urho3D/pull/2578 urho3d/Urho3D]<br />
* [https://github.com/spring/pr-downloader/pull/121 spring/pr-downloader] [https://github.com/spring/spring/pull/506 spring/spring] [https://github.com/spring/DevIL/pull/1 spring/DevIL]<br />
* [https://github.com/OpenXRay/xray-16/pull/578 OpenXRay/xray-16]<br />
* [https://github.com/XProger/OpenLara/commit/6fe0191cc298a5a78d7cd2614678e1f3c952b401 XProger/OpenLara]<br />
* [https://github.com/ec-/Quake3e/pull/53 ec-/Quake3e]<br />
* [https://github.com/lpereira/hardinfo/pull/558 lpereira/hardinfo]<br />
* [https://github.com/kondrak/vkQuake2/pull/101 kondrak/vkQuake2]<br />
* [https://github.com/suijingfeng/vkQuake3/pull/9 suijingfeng/vkQuake3]<br />
<div id="native"></div><br />
<br />
= Известные проекты =<br />
Проекты, которые разрабатываются апстримом с учётом архитектуры e2k:<br />
* [https://github.com/FWGS/xash3d-fwgs FWGS/xash3d-fwgs]<br />
<br />
== ALT Linux Team ==<br />
* [[m-p|mkimage-profiles]]<br />
* [http://git.altlinux.org/people/bircoph/packages/simpletest.git simpletest] — тестирование работоспособности компилятора и тулчейна, а также получение базовой информации об архитектуре и компиляторе.<br />
<br />
== наши коллеги ==<br />
* [https://github.com/embox/embox embox] ''трудами Антона Бондарева''<br />
* [https://github.com/leo-yuriev/t1ha t1ha], [https://github.com/leo-yuriev/libmdbx libmdbx] ''и другие разработки Леонида Юрьева''<br />
* [https://github.com/openssl/openssl/pull/10901 openssl] ''спасибо Дмитрию Белявскому''<br />
<br />
{{Category navigation|title=E2K|category=E2K|sortkey=*}}</div>A1batross