File tree Expand file tree Collapse file tree 1 file changed +21
-0
lines changed Expand file tree Collapse file tree 1 file changed +21
-0
lines changed Original file line number Diff line number Diff line change @@ -14,6 +14,7 @@ use sys;
1414use unstable:: intrinsics;
1515
1616/// Casts the value at `src` to U. The two types must have the same length.
17+ #[ cfg( stage0) ]
1718pub unsafe fn transmute_copy < T , U > ( src : & T ) -> U {
1819 let mut dest: U = intrinsics:: uninit ( ) ;
1920 {
@@ -26,6 +27,26 @@ pub unsafe fn transmute_copy<T, U>(src: &T) -> U {
2627 dest
2728}
2829
30+ #[ cfg( target_word_size = "32" , not( stage0) ) ]
31+ #[ inline( always) ]
32+ pub unsafe fn transmute_copy < T , U > ( src : & T ) -> U {
33+ let mut dest: U = intrinsics:: uninit ( ) ;
34+ let dest_ptr: * mut u8 = transmute ( & mut dest) ;
35+ let src_ptr: * u8 = transmute ( src) ;
36+ intrinsics:: memcpy32 ( dest_ptr, src_ptr, sys:: size_of :: < U > ( ) as u64 ) ;
37+ dest
38+ }
39+
40+ #[ cfg( target_word_size = "64" , not( stage0) ) ]
41+ #[ inline( always) ]
42+ pub unsafe fn transmute_copy < T , U > ( src : & T ) -> U {
43+ let mut dest: U = intrinsics:: uninit ( ) ;
44+ let dest_ptr: * mut u8 = transmute ( & mut dest) ;
45+ let src_ptr: * u8 = transmute ( src) ;
46+ intrinsics:: memcpy64 ( dest_ptr, src_ptr, sys:: size_of :: < U > ( ) as u64 ) ;
47+ dest
48+ }
49+
2950/**
3051 * Move a thing into the void
3152 *
You can’t perform that action at this time.
0 commit comments