]> git.lizzy.rs Git - rust.git/commitdiff
simplify write_bytes() by using memory.write_repeat()
authorDavid Renshaw <david@sandstorm.io>
Tue, 14 Mar 2017 00:47:08 +0000 (20:47 -0400)
committerDavid Renshaw <david@sandstorm.io>
Tue, 14 Mar 2017 00:47:08 +0000 (20:47 -0400)
src/terminator/intrinsic.rs

index 56d097289bcb55c1bc424d68b0b68e6fa4fe8f22..51404e7d13198780dee2eeef996b99891d5d72f8 100644 (file)
@@ -405,13 +405,13 @@ pub(super) fn call_intrinsic(
             "write_bytes" => {
                 let u8 = self.tcx.types.u8;
                 let ty = substs.type_at(0);
+                let ty_align = self.type_align(ty)?;
+                let val_byte = self.value_to_primval(arg_vals[1], u8)?.to_u128()? as u8;
                 let size = self.type_size(ty)?.expect("write_bytes() type must be sized");
-                let mut ptr = arg_vals[0].read_ptr(&self.memory)?;
+                let ptr = arg_vals[0].read_ptr(&self.memory)?;
                 let count = self.value_to_primval(arg_vals[2], usize)?.to_u64()?;
-                for _ in 0..(count * size) {
-                    self.write_value_to_ptr(arg_vals[1], ptr, u8)?;
-                    ptr = ptr.offset(1);
-                }
+                self.memory.check_align(ptr, size * count, ty_align)?;
+                self.memory.write_repeat(ptr, val_byte, size * count)?;
             }
 
             name => return Err(EvalError::Unimplemented(format!("unimplemented intrinsic: {}", name))),