root/arch/x86/boot/copy.S

/* [<][>][^][v][top][bottom][index][help] */
   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 
  18 GLOBAL(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
  32 ENDPROC(memcpy)
  33 
  34 GLOBAL(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
  47 ENDPROC(memset)
  48 
  49 GLOBAL(copy_from_fs)
  50         pushw   %ds
  51         pushw   %fs
  52         popw    %ds
  53         calll   memcpy
  54         popw    %ds
  55         retl
  56 ENDPROC(copy_from_fs)
  57 
  58 GLOBAL(copy_to_fs)
  59         pushw   %es
  60         pushw   %fs
  61         popw    %es
  62         calll   memcpy
  63         popw    %es
  64         retl
  65 ENDPROC(copy_to_fs)

/* [<][>][^][v][top][bottom][index][help] */