1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* ----------------------------------------------------------------------- * 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 * Copyright 2007 rPath, Inc. - All Rights Reserved 6 * 7 * ----------------------------------------------------------------------- */ 8 9#include <linux/linkage.h> 10 11/* 12 * Memory copy routines 13 */ 14 15 .code16 16 .text 17 18SYM_FUNC_START_NOALIGN(memcpy) 19 pushw %si 20 pushw %di 21 movw %ax, %di 22 movw %dx, %si 23 pushw %cx 24 shrw $2, %cx 25 rep; movsl 26 popw %cx 27 andw $3, %cx 28 rep; movsb 29 popw %di 30 popw %si 31 retl 32SYM_FUNC_END(memcpy) 33 34SYM_FUNC_START_NOALIGN(memset) 35 pushw %di 36 movw %ax, %di 37 movzbl %dl, %eax 38 imull $0x01010101,%eax 39 pushw %cx 40 shrw $2, %cx 41 rep; stosl 42 popw %cx 43 andw $3, %cx 44 rep; stosb 45 popw %di 46 retl 47SYM_FUNC_END(memset) 48 49SYM_FUNC_START_NOALIGN(copy_from_fs) 50 pushw %ds 51 pushw %fs 52 popw %ds 53 calll memcpy 54 popw %ds 55 retl 56SYM_FUNC_END(copy_from_fs) 57 58SYM_FUNC_START_NOALIGN(copy_to_fs) 59 pushw %es 60 pushw %fs 61 popw %es 62 calll memcpy 63 popw %es 64 retl 65SYM_FUNC_END(copy_to_fs) 66