linux/arch/x86/boot/copy.S
<<
>>
Prefs
   1/* ----------------------------------------------------------------------- *
   2 *
   3 *   Copyright (C) 1991, 1992 Linus Torvalds
   4 *   Copyright 2007 rPath, Inc. - All Rights Reserved
   5 *
   6 *   This file is part of the Linux kernel, and is made available under
   7 *   the terms of the GNU General Public License version 2.
   8 *
   9 * ----------------------------------------------------------------------- */
  10
  11#include <linux/linkage.h>
  12
  13/*
  14 * Memory copy routines
  15 */
  16
  17        .code16gcc
  18        .text
  19
  20GLOBAL(memcpy)
  21        pushw   %si
  22        pushw   %di
  23        movw    %ax, %di
  24        movw    %dx, %si
  25        pushw   %cx
  26        shrw    $2, %cx
  27        rep; movsl
  28        popw    %cx
  29        andw    $3, %cx
  30        rep; movsb
  31        popw    %di
  32        popw    %si
  33        ret
  34ENDPROC(memcpy)
  35
  36GLOBAL(memset)
  37        pushw   %di
  38        movw    %ax, %di
  39        movzbl  %dl, %eax
  40        imull   $0x01010101,%eax
  41        pushw   %cx
  42        shrw    $2, %cx
  43        rep; stosl
  44        popw    %cx
  45        andw    $3, %cx
  46        rep; stosb
  47        popw    %di
  48        ret
  49ENDPROC(memset)
  50
  51GLOBAL(copy_from_fs)
  52        pushw   %ds
  53        pushw   %fs
  54        popw    %ds
  55        call    memcpy
  56        popw    %ds
  57        ret
  58ENDPROC(copy_from_fs)
  59
  60GLOBAL(copy_to_fs)
  61        pushw   %es
  62        pushw   %fs
  63        popw    %es
  64        call    memcpy
  65        popw    %es
  66        ret
  67ENDPROC(copy_to_fs)
  68
  69#if 0 /* Not currently used, but can be enabled as needed */
  70GLOBAL(copy_from_gs)
  71        pushw   %ds
  72        pushw   %gs
  73        popw    %ds
  74        call    memcpy
  75        popw    %ds
  76        ret
  77ENDPROC(copy_from_gs)
  78
  79GLOBAL(copy_to_gs)
  80        pushw   %es
  81        pushw   %gs
  82        popw    %es
  83        call    memcpy
  84        popw    %es
  85        ret
  86ENDPROC(copy_to_gs)
  87#endif
  88
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.