Почему компилятор Delphi не делает функций встроенного ассемблерного кода?

Иногда я пишу очень короткие функции блока как

function SeniorBit(Value: LongWord): Integer;
asm
        OR    EAX,EAX
        JZ    @@Done
        BSR   EAX,EAX
        INC   EAX
@@Done:
end;

это, кажется, лучшие кандидаты на встраивание:

function SeniorBit(Value: LongWord): Integer; inline;

но компилятор Delphi не позволяет его. Почему?


Обновленный:

Благодаря ldsandon, там существует 5,5-летний открытый отчет о королевском адвокате. Отчет содержит некоторые предложения (как расширение asm директива) для упрощения asm, встраивающего для компилятора. Я предпочел бы представлять "явную" директиву по процедуре/функциональному уровню, в которой говорится компилятору, что это не должно создавать стековый фрейм для процедуры и дополнительно какие регистры (среди eax, edx и ecx) должны быть сохранены.

Если общая задача эффективных процедур встраивания с кодом ВСТРОЕННОГО АССЕМБЛЕРА является трудной (и может быть unnessessary), хорошая идея состоит в том, чтобы позволить встроить для самых важных случаев (как явная функция с explicitely, объявленным использованием регистра).

7
задан Deduplicator 18 February 2015 в 15:38
поделиться

2 ответа

См. Отчет Центра качества № 9283 (и проголосуйте за него). По сути, проблема в том, что компилятор должен уметь понимать, какие регистры сохранять перед встроенным кодом, а что восстанавливать после. Пока компилятор обрабатывает регистр, это легко, когда использование не находится под контролем, это не так. Ваш пример довольно прост, но компилятор должен уметь обрабатывать более сложные случаи. Отчет находится в открытом состоянии, надеюсь, новый компилятор также сможет встроить код BASM.

11
ответ дан 6 December 2019 в 12:48
поделиться

Вы не можете встроить код сборки, созданный вручную.

Было бы очень сложно разрешить встраивание этих частей ассемблера; с обычным встраиванием всевозможные эффекты на использование регистров, локальные переменные и т.д., которые компилятор не может сделать со встроенной сборкой.

5
ответ дан 6 December 2019 в 12:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: