[funini.com] -> [kei@sodan] -> Kernel Reading

root/arch/x86/boot/copy.S

/* [<][>][^][v][top][bottom][index][help] */
/* ----------------------------------------------------------------------- *
 *
 *   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

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

[funini.com] -> [kei@sodan] -> Kernel Reading