Question

Parfois, j'écris très courtes fonctions de montage comme

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

qui semble être les meilleurs candidats pour inline:

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

mais le compilateur Delphi ne permet pas. Pourquoi?


Mise à jour:

Merci à ldsandon, il existe un vieux rel="nofollow ouvert rapport sur QC . Le rapport containes certaines propositions (comme extension de la directive asm) pour simplifier le inline asm pour le compilateur. Je préférerais présenter la directive « nu » au niveau procédure / fonction qui indique au compilateur qu'il ne doit pas créer un cadre de pile pour la procédure et éventuellement ce que les registres (entre EAX, EDX et ECX) doivent être préservées.

Si la tâche générale des procédures d'inlining efficaces avec le code de BASM est difficile (et peut-être unnessessary) une bonne idée est de permettre inline pour les cas les plus importants (comme la fonction nue avec l'utilisation du registre déclaré explicitement).

Était-ce utile?

La solution

Voir le rapport qualité Central # 9283 (et voter pour). Fondamentalement, le problème est que le compilateur devrait être en mesure de comprendre ce qui enregistre pour préserver avant le code en ligne et ce qu'il faut restaurer après. Tant que le compilateur gère le registre, il est facile, lorsque l'utilisation n'est pas sous le contrôle est non. Votre exemple est assez simple, mais le compilateur doit être capable de gérer des cas plus complexes. Le rapport est à l'état ouvert, espérons que le nouveau compilateur sera en mesure inline le code BASM ainsi.

Autres conseils

Vous ne pouvez pas la main en ligne le code assembleur conçu.

Il serait très difficile de permettre inline de ces pièces d'assembleur; avec la normale inline toutes sortes d'effets sur l'utilisation du registre, les variables locales etc sont là que le compilateur ne peut pas faire avec l'assembleur en ligne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top