De acuerdo con este problema que creé (https://github.com/dotnet/coreclr/issues/17294), crear un nuevo backend para una nueva arquitectura es un trabajo complejo, entonces, ¿por qué no crear un nuevo backend que admita múltiples arquitecturas?
Mono ha implementado un backend LLVM .
Digo esto porque la arquitectura Power y s390x está regresando con relativa intensidad ...
Hace unos años trabajamos en un generador de código LLVM para .Net: LLILC . Nos encontramos con una serie de problemas que parecía que iban a ser difíciles de abordar: compatibilidad con GC precisa, compatibilidad total con el modelo de excepción .Net y bajo rendimiento. Puede leer algunos de los detalles aquí: LLILC a los seis meses .
Mono a través de LLVM usa GC conservador y (al menos en algunos casos) no maneja la gama completa de comportamientos de excepción. Esto es aceptable para los objetivos de la aplicación de Mono, pero no es lo suficientemente general para nuestros propósitos.
LLILC todavía podría ser interesante como un jit de nivel superior (algún día) o como un vehículo de activación para hacer que el codegen básico se ejecute en una nueva arquitectura.
Hola @AndyAyersMS
Solucioné un problema de compilación simple para LLILC https://github.com/dotnet/llilc/issues/1097
Por favor, revísalo.
Gracias,
Leslie Zhai
Voy a cerrar este tema, ya que la pregunta ha sido respondida.
Comentario más útil
Hace unos años trabajamos en un generador de código LLVM para .Net: LLILC . Nos encontramos con una serie de problemas que parecía que iban a ser difíciles de abordar: compatibilidad con GC precisa, compatibilidad total con el modelo de excepción .Net y bajo rendimiento. Puede leer algunos de los detalles aquí: LLILC a los seis meses .
Mono a través de LLVM usa GC conservador y (al menos en algunos casos) no maneja la gama completa de comportamientos de excepción. Esto es aceptable para los objetivos de la aplicación de Mono, pero no es lo suficientemente general para nuestros propósitos.
LLILC todavía podría ser interesante como un jit de nivel superior (algún día) o como un vehículo de activación para hacer que el codegen básico se ejecute en una nueva arquitectura.