mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	The memcpy optimization (commit 587a1290a1) has a series
of mistakes:
  - The implementation is wrong: the chunk size calculation is wrong
    leading to invalid memory access.
  - It adds ifunc supports as default, so --disable-multi-arch does
    not work as expected for riscv.
  - It mixes Linux files (memcpy ifunc selection which requires the
    vDSO/syscall mechanism)  with generic support (the memcpy
    optimization itself).
  - There is no __libc_ifunc_impl_list, which makes testing only
    check the selected implementation instead of all supported
    by the system.
This patch also simplifies the required bits to enable ifunc: there
is no need to memcopy.h; nor to add Linux-specific files.
The __memcpy_noalignment tail handling now uses a branchless strategy
similar to aarch64 (overlap 32-bits copies for sizes 4..7 and byte
copies for size 1..3).
Checked on riscv64 and riscv32 by explicitly enabling the function
on __libc_ifunc_impl_list on qemu-system.
Changes from v1:
* Implement the memcpy in assembly to correctly handle RISCV
  strict-alignment.
Reviewed-by: Evan Green <evan@rivosinc.com>
Acked-by: Palmer Dabbelt <palmer@rivosinc.com>
		
	
		
			
				
	
	
		
			9 lines
		
	
	
		
			122 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			9 lines
		
	
	
		
			122 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _SYS_HWPROBE_H
 | |
| # include_next <sys/hwprobe.h>
 | |
| 
 | |
| #ifndef _ISOMAC
 | |
| libc_hidden_proto (__riscv_hwprobe)
 | |
| #endif
 | |
| 
 | |
| #endif
 |