[Migrated] spirv-std inline `asm!` should use `MaybeUninit<T>` instead of `let mut result = T::default();`.
Nessuno ha ancora preso questa issue.
- Lingua principale
- Rust
- Stelle
- 3.4k
- Fork
- 126
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
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?).
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Esamina i siti esistenti di estrazione dei risultati di spirv-std inline asm! e l’approccio MaybeUninit di #1006. Determina l’ambito della sostituzione uniforme degli slot dei risultati T::default(), incluso se sia necessaria una macro wrapper; il lavoro è completato quando l’estrazione applicabile non richiede più T: Default e l’approccio scelto è coerente.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- rust
- Ambito
- compilers
- Tipo di issue
- Funzionalità
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100