Rust-GPU / Rust-GPU/rust-gpu

[Migrated] spirv-std inline `asm!` should use `MaybeUninit<T>` instead of `let mut result = T::default();`.

Abierto
#93 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
Rust
Estrellas
3.4k
Forks
126
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

Issue automatically imported from old repo: https://github.com/EmbarkStudios/rust-gpu/issues/1007
Old labels: t: enhancement,a: asm
Originally creatd by eddyb on 2023-03-17T20:01:45Z


We have a few different ways to extract results from asm!:

  • old unsound approach (UB because of OpReturnValue, so it's getting replaced)
asm! {
    "%result = ...",
    "OpReturnValue %result",
    options(noreturn),
}
  • old approach (sound, but requires T: Default)
let mut result = T::default();
asm!(
    "%result = ...",
    "OpStore {result} %result",
    result = in(reg) &mut result,
);
result
  • new approach (using MaybeUninit<T>), from #1006
let mut result_slot = core::mem::MaybeUninit::uninit();
asm! {
    "%result = ...",
    "OpStore {result_slot} %result",
    result_slot = in(reg) result_slot.as_mut_ptr(),
}
result_slot.assume_init()

In #1006 only the unsound uses of asm!("OpReturnValue") were fixed (i.e. when dealing with opaque handles or &T/&mut T, neither of which implement Default).

However, it might be a good to transition everything uniformly, and maybe even provide a wrapper macro that allows uniformly using asm! with the result slot automatically handled (and even by-ref inputs as well?).

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Revisa los sitios existentes de extracción de resultados de spirv-std inline asm! y el enfoque MaybeUninit de #1006. Determina el alcance de reemplazar uniformemente los slots de resultados T::default(), incluido si se necesita una macro envolvente; se considera terminado cuando la extracción aplicable ya no requiere T: Default y el enfoque elegido es coherente.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
rust
Área
compilers
Tipo de issue
Nueva funcionalidad
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.