Visión general de las plantillas de ensamblador en línea

Fuentes: Inline asm Templates Overview

El lenguaje Odin incorpora un sistema de plantillas de ensamblador en línea (inline asm) diseñado como entidades llamables que se instancian en el lugar de cada llamada, comportándose como intrínsecos. Por ahora, la implementación solo cubre objetivos amd64 (windows_amd64, linux_amd64 y darwin_amd64), aunque la sintaxis está pensada para ser universal y portable entre arquitecturas, siguiendo el modelo del ensamblador de Go inspirado en Plan 9. La declaración sigue la forma name :: asm(params) -> (results) [bindings] { body }, donde los parámetros son operandos de entrada con nombres y tipos simples, los resultados son operandos de salida y el bloque deBindings agrupa enlaces, pines, registros de trabajo, vistas de ancho, clobbers y efectos. El cuerpo de la plantilla usa el orden de operandos estilo Intel (destino, fuente) y el backend se encarga de adaptarlo por arquitectura.

Los parámetros admiten tipos enteros, flotantes, booleanos, punteros, multipunteros y vectores #simd[N]T. Los parámetros con prefijo $ son inmediatos en tiempo de compilación. Los registros físicos sePrefijan con % para evitar colisiones con nombres de usuario y se denominan según la plataforma (%rax, %xmm0, %r11, %al). Las enlaces o ties permiten compartir registro entre entrada y salida (in -> out), los pines (name = %reg) fijan un registro concreto, y los scratch (name: T) declaran registros de trabajo asignados una sola vez por plantilla. Las vistas de ancho (view: T = src) dan un segundo nombre a un registro a otro ancho, útil para idioms como setcc seguido de aritmética.

La documentación también cubre operandos de memoria con direccionamiento efectivo estilo Intel, anotaciones de tamaño para accesos sin registro que defina el ancho, etiquetas locales a la plantilla mangled por instanciación, prefijos de instrucción como lock, y directivas de datos y alineación (#byte, #skip, #nop, #align). Los clobbers se organizan en tres ejes ortogonales: registros, flags de condición y memoria, y suelen inferirse a partir de las instrucciones usadas. En conjunto, el sistema pretende sustituir progresivamente a varios intrínsecos específicos de plataforma y servir como capa unificada de bajo nivel dentro de Odin.