Компилятор ассемблера не хочет генерировать jmp short

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
kitovyj
незнакомец
Сообщения: 2
Зарегистрирован: 22.10.2008 12:11:15

Компилятор ассемблера не хочет генерировать jmp short

Сообщение kitovyj »

Компилятор не хочет генерировать относительный короткий джамп, даже когда ему явно указан постфикс short. Почему? Разные настройки оптимизации пробовал(хотя по-моему никакие оптимизации не должны влиять на ассемблерные процедуры). У меня процедура из 1.5 тыс строк кода на ассемблере, так в ней компилятор не сгенерировал ни одного короткого джампа, все с абсолютным адресом! Для меня это оч. важно, так как существенен размер кода(портирую с делфи). Я в панике.

Вот пример:

sub eax,dword ptr [esp]
add esp,04h
cmp eax,0FFFh
jbe short @not_traced // JBE 0xABSOLUTE_ADDRESS - WHY???!!!
popad
popad
retn
@not_traced:

Есть идеи, в чем может быть дело? Использую lazarus c fpc 2.2.2.

Спасибо.

Исправляюсь: на самом деле компилятор генерит ОТНОСИТЕЛЬНЫЕ джампы, но с 32ух-битным смещением.... т.е. не jmp short а jmp near. Тем не менее, проблема остается, нужен-то jmp short с 8-и битным смещением!
Последний раз редактировалось kitovyj 22.10.2008 18:07:19, всего редактировалось 1 раз.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Дело, надо полагать, в том, что никто никогда не занимался этим вопросом.
И если говорить о размере кода, то эти переходы - последний из источников неоптимальности.

Можно попробовать скомпилить с использованием внешнего ассемблера, может быть в этом случае он модификатор не выкинет.
kitovyj
незнакомец
Сообщения: 2
Зарегистрирован: 22.10.2008 12:11:15

Сообщение kitovyj »

Да, попробую заюзать внешний ассемблер. Запостю баг на багтрекер фрипаскаля. Спасибо.
Ответить