volte scrivo funzioni di montaggio molto brevi comePerché il compilatore Delphi non ha funzioni di assemblaggio inline?
function SeniorBit(Value: LongWord): Integer;
asm
OR EAX,EAX
JZ @@Done
BSR EAX,EAX
INC EAX
@@Done:
end;
che sembra essere i migliori candidati per inline:
function SeniorBit(Value: LongWord): Integer; inline;
ma Delphi compilatore non lo consentono. Perché?
Aggiornato:
Grazie a ldsandon, esiste un 5,5 anni di età aperto report on QC. Il report contiene alcune proposte (come l'estensione della direttiva asm) per semplificare l'allineamento ASM per il compilatore. Preferirei introdurre la direttiva "naked" sul livello procedura/funzione che dice al compilatore che non deve creare uno stack frame per la procedura e facoltativamente quali registri (tra eax, edx ed ecx) dovrebbero essere preservati.
Se il compito generale delle efficienti procedure di inlining con codice BASM è difficile (e potrebbe essere non necessario), una buona idea è quella di abilitare l'inlining per i casi più importanti (come la funzione naked con l'uso dichiarato del registro esplicitamente).
È necessario aggiungere la convenzione di chiamata registro dopo il risultato (ad es.: Integer; register;) per assicurarsi che la funzione funzioni anche quando viene utilizzata una convenzione di chiamata diversa durante la compilazione. –
Se si desidera discutere la possibilità FUTURE del compilatore di supportare le funzioni di assemblatore in linea, forse QC o una bacheca è il posto migliore per farlo. Ho provato a rispondere che al momento non è davvero possibile inline una funzione con un blocco asm in quanto implementazione. Potresti pensare che sia una buona idea (hey mi piace il montaggio e penso che sarebbe bello). Ma è così il posto dove discutere le richieste di funzionalità per i compilatori ?? Ho pensato che volevi la risposta sul tuo problema a portata di mano: perché non posso metterlo in riga. –
@Ritsaert Hornstra: perché pensi che SO non sia il posto dove discutere le richieste di funzionalità per i compilatori? È chiaramente la domanda di programmazione, e dove devono essere le risposte su come implementare la cosa nel modo migliore e [possibilmente domanda retorica] perché la cosa non è ancora stata implementata. – kludg