MCPcopy Create free account
hub / github.com/Rust-GPU/rust-gpu / memcpy

Method memcpy

crates/rustc_codegen_spirv/src/builder/builder_methods.rs:1923–1968  ·  view source on GitHub ↗
(
        &mut self,
        dst: Self::Value,
        _dst_align: Align,
        src: Self::Value,
        _src_align: Align,
        size: Self::Value,
        flags: MemFlags,
    )

Source from the content-addressed store, hash-verified

1921 }
1922
1923 fn memcpy(
1924 &mut self,
1925 dst: Self::Value,
1926 _dst_align: Align,
1927 src: Self::Value,
1928 _src_align: Align,
1929 size: Self::Value,
1930 flags: MemFlags,
1931 ) {
1932 if flags != MemFlags::empty() {
1933 self.err(&format!(
1934 "memcpy with mem flags is not supported yet: {flags:?}"
1935 ));
1936 }
1937 let const_size = self.builder.lookup_const_u64(size);
1938 if const_size == Some(0) {
1939 // Nothing to do!
1940 return;
1941 }
1942 let src_pointee = match self.lookup_type(src.ty) {
1943 SpirvType::Pointer { pointee } => Some(pointee),
1944 _ => None,
1945 };
1946 let src_element_size = src_pointee.and_then(|p| self.lookup_type(p).sizeof(self));
1947 if src_element_size.is_some() && src_element_size == const_size.map(Size::from_bytes) {
1948 if let Some(const_value) = src.const_fold_load(self) {
1949 self.store(const_value, dst, Align::from_bytes(0).unwrap());
1950 } else {
1951 self.emit()
1952 .copy_memory(dst.def(self), src.def(self), None, None, empty())
1953 .unwrap();
1954 }
1955 } else {
1956 self.emit()
1957 .copy_memory_sized(
1958 dst.def(self),
1959 src.def(self),
1960 size.def(self),
1961 None,
1962 None,
1963 empty(),
1964 )
1965 .unwrap();
1966 self.zombie(dst.def(self), "cannot memcpy dynamically sized data");
1967 }
1968 }
1969
1970 fn memmove(
1971 &mut self,

Callers 1

memmoveMethod · 0.80

Calls 9

errMethod · 0.80
lookup_const_u64Method · 0.80
lookup_typeMethod · 0.80
sizeofMethod · 0.80
const_fold_loadMethod · 0.80
zombieMethod · 0.80
storeMethod · 0.45
emitMethod · 0.45
defMethod · 0.45

Tested by

no test coverage detected