Skip to content

Commit c0faa83

Browse files
committed
use kernel or dmac memcpy, kernel memset
1 parent e3cb49b commit c0faa83

2 files changed

Lines changed: 9 additions & 42 deletions

File tree

psp/src/alloc_impl.rs

Lines changed: 6 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -60,55 +60,20 @@ fn aeh(_: Layout) -> ! { loop {} }
6060
#[no_mangle]
6161
#[cfg(not(feature = "stub-only"))]
6262
unsafe extern fn memset(ptr: *mut u8, value: u32, num: usize) -> *mut u8 {
63-
let mut size = num as usize;
64-
let mut ptr32 = ptr as *mut u32;
65-
let val32 = core::mem::transmute::<[u8;4], u32>([value as u8; 4]);
66-
while size > 3 {
67-
*ptr32 = val32;
68-
ptr32 = ptr32.add(1);
69-
size = size.saturating_sub(4);
70-
}
71-
let mut ptr_new = ptr32 as *mut u8;
72-
while size > 0 {
73-
*ptr_new = value as u8;
74-
ptr_new = ptr_new.add(1);
75-
size = size.saturating_sub(1);
76-
}
77-
ptr
63+
crate::sys::sceKernelMemset(ptr, value as u8, num)
7864
}
7965

8066
#[no_mangle]
8167
#[cfg(not(feature = "stub-only"))]
8268
unsafe extern fn memcpy(dst: *mut u8, src: *const u8, num: usize) -> *mut u8 {
83-
for i in 0..num {
84-
*dst.add(i) = *src.add(i);
69+
if num < 12_000 {
70+
crate::sys::sceKernelMemcpy(dst, src, num)
71+
} else {
72+
crate::sys::sceDmacMemcpy(dst, src, num);
73+
dst
8574
}
86-
dst
8775
}
8876

89-
// broke format macro somehow
90-
//#[no_mangle]
91-
//#[cfg(not(feature = "stub-only"))]
92-
//unsafe extern fn memcpy(dst: *mut u8, src: *const u8, num: isize) -> *mut u8 {
93-
//let mut size = num as usize;
94-
//let mut dst32 = dst as *mut u32;
95-
//let mut src32 = src as *const u32;
96-
//while size > 3 {
97-
//*dst32 = *src32;
98-
//dst32 = dst32.add(1);
99-
//src32 = src32.add(1);
100-
//size = size.saturating_sub(4);
101-
//}
102-
//let mut dst_new = dst32 as *mut u8;
103-
//let mut src_new = src32 as *const u8;
104-
//while size > 0 {
105-
//*dst_new = *src_new;
106-
//dst_new = dst_new.add(1);
107-
//src_new = src_new.add(1);
108-
//size = size.saturating_sub(1);
109-
//}
110-
//dst
111-
//}
11277

11378
#[no_mangle]
11479
#[cfg(not(feature = "stub-only"))]
@@ -164,6 +129,5 @@ unsafe extern fn memmove(dst: *mut u8, src: *mut u8, num: isize) -> *mut u8 {
164129
size = size.saturating_sub(1);
165130
}
166131
}
167-
168132
dst
169133
}

psp/src/sys/kernel/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,9 @@ psp_extern! {
694694

695695
#[psp(0x1839852A)]
696696
pub fn sceKernelMemcpy(dst: *mut u8, src: *const u8, num: usize) -> *mut u8;
697+
698+
#[psp(0xA089ECA4)]
699+
pub fn sceKernelMemset(dst: *mut u8, val: u8, num: usize) -> *mut u8;
697700
}
698701

699702
#[repr(C)]

0 commit comments

Comments
 (0)