| /* ----------------------------------------------------------------------- * |
| * |
| * 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. |
| * |
| * ----------------------------------------------------------------------- */ |
| |
| /* |
| * Memory copy routines |
| */ |
| |
| .code16gcc |
| .text |
| |
| .globl memcpy |
| .type memcpy, @function |
| 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 |
| ret |
| .size memcpy, .-memcpy |
| |
| .globl memset |
| .type memset, @function |
| 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 |
| ret |
| .size memset, .-memset |
| |
| .globl copy_from_fs |
| .type copy_from_fs, @function |
| copy_from_fs: |
| pushw %ds |
| pushw %fs |
| popw %ds |
| call memcpy |
| popw %ds |
| ret |
| .size copy_from_fs, .-copy_from_fs |
| |
| .globl copy_to_fs |
| .type copy_to_fs, @function |
| copy_to_fs: |
| pushw %es |
| pushw %fs |
| popw %es |
| call memcpy |
| popw %es |
| ret |
| .size copy_to_fs, .-copy_to_fs |
| |
| #if 0 /* Not currently used, but can be enabled as needed */ |
| |
| .globl copy_from_gs |
| .type copy_from_gs, @function |
| copy_from_gs: |
| pushw %ds |
| pushw %gs |
| popw %ds |
| call memcpy |
| popw %ds |
| ret |
| .size copy_from_gs, .-copy_from_gs |
| .globl copy_to_gs |
| |
| .type copy_to_gs, @function |
| copy_to_gs: |
| pushw %es |
| pushw %gs |
| popw %es |
| call memcpy |
| popw %es |
| ret |
| .size copy_to_gs, .-copy_to_gs |
| |
| #endif |