|
Полубага ARM системы команд, Флаг N устанавливается без флага V |
|
|
|
 |
Ответов
|
Aug 23 2015, 14:53
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(SSerge @ Aug 23 2015, 16:24)  ...или становится нулём или не изменяется. Они выбрали второе. Понятно, что нулём. Потенциальная грабля в overflow flag preserve. Никакой пользы в неустановке нет. В отличие от carry flag preserve. Инноваторы. ----- RRX отличается от LSR #1 настолько минимально, что слов приличных нет в адрес разработчиков, таким недоразумением осложнивших декод LSB-битовых потоков. Оба недочёта сразу снизили пиковую производительность системы команд (RRX в Thumb(1)). Любопытно, если для M3/M4 закомбинировать два условия в IT-блоке (Z-флаг IT-блоком, N-флаг условным переходом), то проц не споткнётся?  PS. Но в целом система команд шикарная.
Сообщение отредактировал GetSmart - Aug 24 2015, 11:41
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Aug 24 2015, 07:00
|
Знающий
   
Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454

|
Цитата(GetSmart @ Aug 23 2015, 17:53)  Понятно, что нулём. Потенциальная грабля в overflow flag preserve. Никакой пользы в неустановке нет. В отличие от carry flag preserve. Инноваторы. Любопытно, если для M3/M4 закомбинировать два условия в IT-блоке (Z-флаг IT-блоком, N-флаг условным переходом), то проц не споткнётся?  По поводу граблей не скажу. По моему мнению это сделано для получения быстродействия команда/такт. Если после команды, которая меняет флаг идет анализ флага, то идет задержка на такт. По этому компиляторы стараются вставить команду не модифицирующую флаги между такой парой команд. При программировании на ассемблере, нужно самому перетасовывать команды. Вот пример Код CMP R0, #0x40 STR R2, [R7,#0x1C] BCC loc_8000760
|
|
|
|
|
Aug 24 2015, 11:09
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(misyachniy @ Aug 24 2015, 11:00)  Если после команды, которая меняет флаг идет анализ флага, то идет задержка на такт. В каком ядре? Или сразу ссылку на документ киньте. В ARMv4, ARMv6, ARMv7-M такой особенности нет. Цитата По моему мнению это сделано для получения быстродействия команда/такт. Это как это? Установка двух флагов не тормозит, а установка трёх уже тормозит? Upd. Цитата(GetSmart) Любопытно, если для M3/M4 закомбинировать два условия в IT-блоке (Z-флаг IT-блоком, N-флаг условным переходом), то проц не споткнётся?  Оказывается нельзя вставлять условные переходы (Bxx) внутрь IT-блока. Почему - загадка. Безусловный B можно в конце.
Сообщение отредактировал GetSmart - Aug 24 2015, 14:29
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Aug 24 2015, 13:12
|
Знающий
   
Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454

|
Цитата(GetSmart @ Aug 24 2015, 14:09)  В каком ядре? Или сразу ссылку на документ киньте.
В ARMv4, ARMv6, ARMv7-M такой особенности нет. Я же сказал "По моему мнению" :-) Я анализировал коды после компилятора С. И увидел коды, очень похожие по стилю на x86. В x86 из за конвейерности обработки, порядок команд влияет на скорость работы. Если я не прав, то прошу модератора почистить мои посты в этой ветке, дабы не вводить народ в заблуждение. Да и перед потомками не будет стыдно ;-)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|