[Migrated] spirv-std inline `asm!` should use `MaybeUninit<T>` instead of `let mut result = T::default();`.
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Rust
- Sterne
- 3.4k
- Forks
- 126
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
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?).
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Überprüfe die vorhandenen Stellen zur Ergebnisextraktion von spirv-std inline asm! sowie den MaybeUninit-Ansatz aus #1006. Bestimme den Umfang des einheitlichen Ersetzens von T::default()-Ergebnis-Slots, einschließlich der Frage, ob ein Wrapper-Makro erforderlich ist; abgeschlossen bedeutet, dass die anwendbare Extraktion T: Default nicht mehr erfordert und der gewählte Ansatz konsistent ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- rust
- Bereich
- compilers
- Issue-Typ
- Feature
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100