Skip to content

Commit 7ad7346

Browse files
committed
codegen: memmove/memset cannot be non-temporal
1 parent 6b7db50 commit 7ad7346

File tree

1 file changed

+4
-9
lines changed

1 file changed

+4
-9
lines changed

src/builder.rs

+4-9
Original file line numberDiff line numberDiff line change
@@ -1301,19 +1301,13 @@ impl<'a, 'gcc, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'gcc, 'tcx> {
13011301
fn memmove(
13021302
&mut self,
13031303
dst: RValue<'gcc>,
1304-
dst_align: Align,
1304+
_dst_align: Align,
13051305
src: RValue<'gcc>,
1306-
src_align: Align,
1306+
_src_align: Align,
13071307
size: RValue<'gcc>,
13081308
flags: MemFlags,
13091309
) {
1310-
if flags.contains(MemFlags::NONTEMPORAL) {
1311-
// HACK(nox): This is inefficient but there is no nontemporal memmove.
1312-
let val = self.load(src.get_type().get_pointee().expect("get_pointee"), src, src_align);
1313-
let ptr = self.pointercast(dst, self.type_ptr_to(self.val_ty(val)));
1314-
self.store_with_flags(val, ptr, dst_align, flags);
1315-
return;
1316-
}
1310+
assert!(!flags.contains(MemFlags::NONTEMPORAL), "non-temporal memmove not supported");
13171311
let size = self.intcast(size, self.type_size_t(), false);
13181312
let _is_volatile = flags.contains(MemFlags::VOLATILE);
13191313
let dst = self.pointercast(dst, self.type_i8p());
@@ -1335,6 +1329,7 @@ impl<'a, 'gcc, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'gcc, 'tcx> {
13351329
_align: Align,
13361330
flags: MemFlags,
13371331
) {
1332+
assert!(!flags.contains(MemFlags::NONTEMPORAL), "non-temporal memset not supported");
13381333
let _is_volatile = flags.contains(MemFlags::VOLATILE);
13391334
let ptr = self.pointercast(ptr, self.type_i8p());
13401335
let memset = self.context.get_builtin_function("memset");

0 commit comments

Comments
 (0)