Dirección de etiquetas (MSVC)

Estamos escribiendo un código de bytes para un lenguaje compilado de alto nivel, y después de un poco de creación de perfiles y optimización, quedó claro que la mayor sobrecarga de rendimiento actual es la declaración de cambio que estamos usando para saltar a los casos de código de bytes .

Investigamos extraer la dirección de cada etiqueta de caso y almacenarla en la secuencia del código de bytes, en lugar de la ID de instrucción que usualmente activamos. Si hacemos eso, podemos omitir la tabla de salto y saltar directamente a la ubicación del código de la instrucción que se está ejecutando actualmente. Esto funciona fantásticamente en GCC, sin embargo, MSVC no parece admitir una característica como esta.

Intentamos usar el ensamblaje en línea para tomar la dirección de las etiquetas (y saltar a ellas), y funciona, sin embargo, el uso del ensamblaje en línea hace que el optimizador de MSVC evite toda la función.

¿Hay alguna forma de permitir que el optimizador siga ejecutando el código? Desafortunadamente, no podemos extraer el ensamblaje en línea en otra función que no sea aquella en la que se hicieron las etiquetas, ya que no hay forma de hacer referencia a una etiqueta para otra función incluso en el ensamblaje en línea. ¿Alguna idea o idea? Su contribución es muy apreciada, gracias!

Respuestas a la pregunta(3)

Su respuesta a la pregunta