Ух, наконец интересный холивар
))
Вставлю и я свое слово по поводу компиляторов.
Да, последние версии на SH4 к сожалению корявые, особенно те что пошли после 5.2. Но я думаю это лишь потому, что на эти процессоры уже все забили по большому счету.
А вот по поводу производительности и оптимизации я не согласен с
megavolt85.
Мне кажется что судить по читабельности ассемблера после компилятора неверно, просто потому, что современные компиляторы так хитро расставляют инструкции, чтобы полноценно использовать суперскалярность и кэш. Да, читать такой асм код вообще невозможно порой, но это и не нужно разработчику в большинстве случаев. Этот код читает процессор, а ему хорошо когда инструкции расположены особым образом и этот особый образ совсем не подходит для чтения человеком, для него это абракадарба.
Старые компиляторы вообще ничего не оптимизировали, они практически прямолинейно транслировали Си код в ассемблер и только поэтому читать такой асм легко человеку, потому что он выглядит почти как Си код, который и писал человек.
Я лично пробовал писать асм от руки с учетом суперскалярности и прочих хитростей процессора и поверьте мне, код этот абсолютно не читаем становится с логической точки зрения, его и писать сложно и уж тем более читать тому, кто его первый раз увидел.
А вот производительность такого кода значительно больше. Я не просто так пытался использовать самые новые компиляторы, с каждой новой версией код становился все меньше и быстрее. Но к сожалению в какой-то момент они что-то сломали в поддержке SH4 так сильно, что все эти новшества были убиты багами. Так что позже версии 5.2, компиляторы использовать стало просто невозможно, хотя код там получался еще меньше и еще быстрее.
Выравнивание же под 32 байта в коде нужно для кэша, так как одна линия кэша (обоих типов) равна 32 байтам. И заполнять ее меньше нет никакого смысла, даже если записать туда 8 байт, использоваться будет 32 и в кэше поиск будет осуществляться по адресу начала этих 32 байт.
Да это немного откусывает оперативки, но если тебе важнее она, то собирай с другими оптимизациями, благо их 4 уровня + есть возможность включать и выключать что не нужно доп. флагами.
Если код не сильно громоздкий и не требует уместиться в микроразмер, то такой подход с выравниванием себя оправдывает, потому как оптимальная работа с кэшем значительно повышает производительность всего кода в целом, потому что оперативка очень медленная по сравнению с кэшем процессора. И чем меньше процессор в нее ходит, тем больше есть у него свободного времени на выполнение инструкций, вместо ожидания памяти. Тут главное нужно понимать - процессор значительно быстрее памяти, чем меньше обращений к памяти, тем быстрее работает код. Поэтому читать и писать в память нужно максимальными блоками, которые позволяет шина. А прежде чем работать с блоком данных и/или инструкций, его нужно предварительно поместить в кэш.
Ну и немного о легальности.
Конечно глупо сейчас заявлять что KOS была написана только реверсинжинирингом. Это не правда. Реверс там безусловно есть, но не все на нем основано.
Базовая информация для ядра (а точнее зачаток этого ядра) была взята с сайта Marcus Comstedt, который в свою очередь эту инфу явно где-то раздобыл, мне кажется у него был доступ к материалам о создании консоли, по крайне мере о железе. Скорее всего у него есть друг который к этому был причастен. Явно не он сам причастен, иначе он бы молчал в тряпочку из за подписанных соглашений. Да и Marcus не дурак, открыто не выкладывал всю инфу, оформил кое-что как свое исследование и не выложил ничего критически важного. Так же этот-же друг дал полную инфу и для Rand Linden (или Marcus ему дал), который создал эмулятор Bleem!, без этой инфы создание эмулятора такого уровня в те года было просто невозможным, потому как в отрытом доступе ничего кроме корявый поделок и обрывков инфы небыло. Даже SDK не помогли бы, потому как там нет исходников, а на реверс нужно огромное количество времени. Я не хочу уменьшить тем самым гениальность автора, ни в коем случае, он при любом раскладе крутой.
Плюс ко всему, я могу сходу тыкнуть носом того-же Lawrence Sebald (aka BlueCrab) в то, что он сам подглядывал инфу в официальных источниках (как пример драйвер G1-ATA), а так же он сам ковырял всякие PSO и делал для них патчеры/загрузчики... Айайай пират.
В общем конечно странно наблюдать весь этот легальный буллщит. Консоль и ее технологии уже на столько устарели, что это по сути никому не нужно уже кроме этих же фанатов, которые еще зачем-то кривятся лицом. Тут в пору уже всю эту инфу на памятнике гравировать, а они все пыхтят и боятся что их Sega прижмет.