68 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /* ----------------------------------------------------------------------- *
 | |
|  *
 | |
|  *   Copyright (C) 1991, 1992 Linus Torvalds
 | |
|  *   Copyright 2007 rPath, Inc. - All Rights Reserved
 | |
|  *
 | |
|  *   This file is part of the Linux kernel, and is made available under
 | |
|  *   the terms of the GNU General Public License version 2.
 | |
|  *
 | |
|  * ----------------------------------------------------------------------- */
 | |
| 
 | |
| #include <linux/linkage.h>
 | |
| 
 | |
| /*
 | |
|  * Memory copy routines
 | |
|  */
 | |
| 
 | |
| 	.code16
 | |
| 	.text
 | |
| 
 | |
| SYM_FUNC_START_NOALIGN(memcpy)
 | |
| 	pushw	%si
 | |
| 	pushw	%di
 | |
| 	movw	%ax, %di
 | |
| 	movw	%dx, %si
 | |
| 	pushw	%cx
 | |
| 	shrw	$2, %cx
 | |
| 	rep; movsl
 | |
| 	popw	%cx
 | |
| 	andw	$3, %cx
 | |
| 	rep; movsb
 | |
| 	popw	%di
 | |
| 	popw	%si
 | |
| 	retl
 | |
| SYM_FUNC_END(memcpy)
 | |
| 
 | |
| SYM_FUNC_START_NOALIGN(memset)
 | |
| 	pushw	%di
 | |
| 	movw	%ax, %di
 | |
| 	movzbl	%dl, %eax
 | |
| 	imull	$0x01010101,%eax
 | |
| 	pushw	%cx
 | |
| 	shrw	$2, %cx
 | |
| 	rep; stosl
 | |
| 	popw	%cx
 | |
| 	andw	$3, %cx
 | |
| 	rep; stosb
 | |
| 	popw	%di
 | |
| 	retl
 | |
| SYM_FUNC_END(memset)
 | |
| 
 | |
| SYM_FUNC_START_NOALIGN(copy_from_fs)
 | |
| 	pushw	%ds
 | |
| 	pushw	%fs
 | |
| 	popw	%ds
 | |
| 	calll	memcpy
 | |
| 	popw	%ds
 | |
| 	retl
 | |
| SYM_FUNC_END(copy_from_fs)
 | |
| 
 | |
| SYM_FUNC_START_NOALIGN(copy_to_fs)
 | |
| 	pushw	%es
 | |
| 	pushw	%fs
 | |
| 	popw	%es
 | |
| 	calll	memcpy
 | |
| 	popw	%es
 | |
| 	retl
 | |
| SYM_FUNC_END(copy_to_fs)
 |