aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/backend/rust-builtins.h
diff options
context:
space:
mode:
authorArthur Cohen <arthur.cohen@embecosm.com>2022-08-10 16:08:38 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2022-08-16 11:29:00 +0200
commitf68ecc7e5914ef99b22c258e404c73b2401f9d89 (patch)
treef790a4bc549fcaee5e73a566f1507a5eae7b525b /gcc/rust/backend/rust-builtins.h
parent021e4953390da748515debfc8973149457d3118a (diff)
downloadgcc-f68ecc7e5914ef99b22c258e404c73b2401f9d89.zip
gcc-f68ecc7e5914ef99b22c258e404c73b2401f9d89.tar.gz
gcc-f68ecc7e5914ef99b22c258e404c73b2401f9d89.tar.bz2
intrinsics: Add copy_nonoverlapping<T>
This intrinsic is similar to C's memcpy (or in our case, GCC's __builtin_memcpy) with the order of arguments swapped and knowledge about the type of the operands. So we can desugar the following calls: `copy_nonoverlapping::<T>(src, dst, count)` can be converted to `__builtin_memcpy(dst, src, count * size_of::<T>())` Finally, unlike most intrinsics, copy_nonoverlapping must be marked as impure Co-authored-by: philbert <philip.herron@embecosm.com>
Diffstat (limited to 'gcc/rust/backend/rust-builtins.h')
-rw-r--r--gcc/rust/backend/rust-builtins.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/rust/backend/rust-builtins.h b/gcc/rust/backend/rust-builtins.h
index 13c16d1..2bfa6c6 100644
--- a/gcc/rust/backend/rust-builtins.h
+++ b/gcc/rust/backend/rust-builtins.h
@@ -122,6 +122,14 @@ private:
define_builtin ("breakpoint", BUILT_IN_TRAP, "__builtin_trap", "breakpoint",
build_function_type (void_type_node, void_list_node),
builtin_const | builtin_noreturn);
+
+ define_builtin (
+ "memcpy", BUILT_IN_MEMCPY, "__builtin_memcpy", "memcpy",
+ build_function_type_list (build_pointer_type (void_type_node),
+ build_pointer_type (void_type_node),
+ build_pointer_type (void_type_node),
+ size_type_node, NULL_TREE),
+ 0);
}
// Define a builtin function. BCODE is the builtin function code