A veces escribo las funciones de montaje muy cortos como¿Por qué el compilador Delphi no incorpora las funciones de ensamblaje?
function SeniorBit(Value: LongWord): Integer;
asm
OR EAX,EAX
JZ @@Done
BSR EAX,EAX
INC EAX
@@Done:
end;
que parece ser los mejores candidatos para procesos en línea:
function SeniorBit(Value: LongWord): Integer; inline;
pero Delphi compilador no lo permite. ¿Por qué?
Actualizado:
Gracias a ldsandon, existe una reducción del 5,5 años report on QC abierta. El informe contiene algunas propuestas (como la extensión de la directiva asm) para simplificar la creación de asm para el compilador. Preferiría introducir la directiva "naked" en el nivel de procedimiento/función que le dice al compilador que no tiene que crear un marco de pila para el procedimiento y, opcionalmente, qué registros (entre eax, edx y ecx) deben conservarse.
Si la tarea general de los procedimientos efectivos de enlining con código BASM es difícil (y puede no serlo) una buena idea es permitir la alineación para los casos más importantes (como la función desnuda con uso de registro explícitamente declarado).
Debe agregar la convención de llamada de registro después del resultado (por ejemplo ...: Entero; registrar;) para asegurarse de que la función también funciona cuando se usa una convención de llamada diferente durante la compilación. –
Si quisiera analizar la posibilidad FUTURA de que el compilador admita funciones de ensamblador en línea, quizás el control de calidad o un tablero de mensajes sea el mejor lugar para hacerlo. Intenté responder que en este momento no es posible alinear una función con un bloque asm ya que es una implementación. Podrías pensar que es una buena idea (oye, me gusta el montaje y creo que sería bueno). ¿Pero es TAN el lugar para discutir las solicitudes de características para los compiladores? Pensé que querías la respuesta sobre tu problema: ¿por qué no puedo alinear esto? –
@Ritsaert Hornstra: ¿por qué crees que SO no es el lugar para discutir las solicitudes de funciones para los compiladores? Es claramente la pregunta de programación, y dónde deben estar las respuestas sobre cómo implementar la cosa de la mejor manera y [posiblemente la pregunta retórica] por qué la cosa aún no se ha implementado. – kludg