GetSmart 0 23 августа, 2015 Опубликовано 23 августа, 2015 (изменено) · Жалоба Не пойму задумку разработчиков с overflow flag preserve во многих командах, устанавливающих флаги. В условных командах есть комбинация флагов Z, N и V ==> GT, LE (например BGT, BLE). После многих команд, меняющих флаги эти условия невозможно применить. Будь то MOVS, EORS и прочие. ------- А за то, что RRX зажали для Thumb / CM0 (хоть для одного единственного регистра) минусануть бы карму этим разработчикам. Изменено 23 августа, 2015 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 6 23 августа, 2015 Опубликовано 23 августа, 2015 · Жалоба В упомянутых выше командах типа пересылок или логических флаг V (Overflow) на выходе АЛУ может быть только нулём. У разработчиков архитектуры был выбор: флаг V после исполнения таких команд или становится нулём или не изменяется. Они выбрали второе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 23 августа, 2015 Опубликовано 23 августа, 2015 (изменено) · Жалоба ...или становится нулём или не изменяется. Они выбрали второе. Понятно, что нулём. Потенциальная грабля в overflow flag preserve. Никакой пользы в неустановке нет. В отличие от carry flag preserve. Инноваторы. ----- RRX отличается от LSR #1 настолько минимально, что слов приличных нет в адрес разработчиков, таким недоразумением осложнивших декод LSB-битовых потоков. Оба недочёта сразу снизили пиковую производительность системы команд (RRX в Thumb(1)). Любопытно, если для M3/M4 закомбинировать два условия в IT-блоке (Z-флаг IT-блоком, N-флаг условным переходом), то проц не споткнётся? :) PS. Но в целом система команд шикарная. Изменено 24 августа, 2015 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 24 августа, 2015 Опубликовано 24 августа, 2015 · Жалоба Понятно, что нулём. Потенциальная грабля в overflow flag preserve. Никакой пользы в неустановке нет. В отличие от carry flag preserve. Инноваторы. Любопытно, если для M3/M4 закомбинировать два условия в IT-блоке (Z-флаг IT-блоком, N-флаг условным переходом), то проц не споткнётся? :) По поводу граблей не скажу. По моему мнению это сделано для получения быстродействия команда/такт. Если после команды, которая меняет флаг идет анализ флага, то идет задержка на такт. По этому компиляторы стараются вставить команду не модифицирующую флаги между такой парой команд. При программировании на ассемблере, нужно самому перетасовывать команды. Вот пример CMP R0, #0x40 STR R2, [R7,#0x1C] BCC loc_8000760 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 24 августа, 2015 Опубликовано 24 августа, 2015 (изменено) · Жалоба Если после команды, которая меняет флаг идет анализ флага, то идет задержка на такт. В каком ядре? Или сразу ссылку на документ киньте. В ARMv4, ARMv6, ARMv7-M такой особенности нет. По моему мнению это сделано для получения быстродействия команда/такт. Это как это? Установка двух флагов не тормозит, а установка трёх уже тормозит? Upd. Любопытно, если для M3/M4 закомбинировать два условия в IT-блоке (Z-флаг IT-блоком, N-флаг условным переходом), то проц не споткнётся? :) Оказывается нельзя вставлять условные переходы (Bxx) внутрь IT-блока. Почему - загадка. Безусловный B можно в конце. Изменено 24 августа, 2015 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 24 августа, 2015 Опубликовано 24 августа, 2015 · Жалоба В каком ядре? Или сразу ссылку на документ киньте. В ARMv4, ARMv6, ARMv7-M такой особенности нет. Я же сказал "По моему мнению" :-) Я анализировал коды после компилятора С. И увидел коды, очень похожие по стилю на x86. В x86 из за конвейерности обработки, порядок команд влияет на скорость работы. Если я не прав, то прошу модератора почистить мои посты в этой ветке, дабы не вводить народ в заблуждение. Да и перед потомками не будет стыдно ;-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 24 августа, 2015 Опубликовано 24 августа, 2015 · Жалоба Я анализировал коды после компилятора С. ... В x86 из за конвейерности обработки, порядок команд влияет на скорость работы. Компиляторы бывают разные. Это не из-за задержек обновления флагов. Эта универсальность с расчётом на суперскалярные ARM. Вроде бы Cortex-M7 суперскалярный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 24 августа, 2015 Опубликовано 24 августа, 2015 · Жалоба Если после команды, которая меняет флаг идет анализ флага, то идет задержка на такт. Вы точно не путаете с DSP??? Я анализировал коды после компилятора С. И увидел коды, очень похожие по стилю на x86. В x86 из за конвейерности обработки, порядок команд влияет на скорость работы. Интересный способ изучения системы команд: гадание по листингу. Вы судьбу по звёздам не предсказываете? :-D Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 26 августа, 2015 Опубликовано 26 августа, 2015 · Жалоба Вы точно не путаете с DSP??? Интересный способ изучения системы команд: гадание по листингу. Вы судьбу по звёздам не предсказываете? :-D Немного попутал мягкое с теплым. :-) http://computersbooks.net/index.php?id1=4&...00&page=177 AGI - это ситуация, при которой регистр, используемый командой для генерации адреса как базовый или индексный, являлся приемником предыдущей команды. В таком случае процессор тратит один дополнительный такт. Сепциально систему команд я не изучаю. Подглядываю в "чужие" прошивки. Сейчас Ассемблер нужен только в специфичных случаях. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 26 августа, 2015 Опубликовано 26 августа, 2015 · Жалоба Надо было добавить "Последовательность команд add edx,4 mov esi,[edx] выполняется с AGI на любом процессоре. • " :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 27 августа, 2015 Опубликовано 27 августа, 2015 (изменено) · Жалоба Подведём итог. У разработчиков архитектуры был выбор: флаг V после исполнения таких команд или становится нулём или не изменяется. Они выбрали второе. Пользы нет. Компромисса нет. Замедление есть. Плюс бессмысленное отличие от остальных платформ может навредить. В упомянутых выше командах типа пересылок или логических... В подавляющем большинстве команд, устанавливающих флаги. ---- Отсутствие в Thumb команды RRX не было криминалом до тех пор, пока в процессоре было переключение 32-ух или 16-ти разрядной системы команд. В ARMv6 отключили 32-разрядную и должны были ввести дополнительный код RRX, наряду с другими новыми командами. Во всех "уважающих" себя и программистов платформах аналог этой команды есть. На позиционирование ARMv6/CM0 как самого микропотребляющего ядра это не повлияло бы. Изменено 27 августа, 2015 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться