OpenCores
URL https://opencores.org/ocsvn/or1k_soc_on_altera_embedded_dev_kit/or1k_soc_on_altera_embedded_dev_kit/trunk

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [linux-2.6/] [linux-2.6.24/] [arch/] [powerpc/] [lib/] [mem_64.S] - Rev 3

Compare with Previous | Blame | View Log

/*
 * String handling functions for PowerPC.
 *
 * Copyright (C) 1996 Paul Mackerras.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version
 * 2 of the License, or (at your option) any later version.
 */
#include <asm/processor.h>
#include <asm/errno.h>
#include <asm/ppc_asm.h>

_GLOBAL(memset)
        neg     r0,r3
        rlwimi  r4,r4,8,16,23
        andi.   r0,r0,7                 /* # bytes to be 8-byte aligned */
        rlwimi  r4,r4,16,0,15
        cmplw   cr1,r5,r0               /* do we get that far? */
        rldimi  r4,r4,32,0
        PPC_MTOCRF      1,r0
        mr      r6,r3
        blt     cr1,8f
        beq+    3f                      /* if already 8-byte aligned */
        subf    r5,r0,r5
        bf      31,1f
        stb     r4,0(r6)
        addi    r6,r6,1
1:      bf      30,2f
        sth     r4,0(r6)
        addi    r6,r6,2
2:      bf      29,3f
        stw     r4,0(r6)
        addi    r6,r6,4
3:      srdi.   r0,r5,6
        clrldi  r5,r5,58
        mtctr   r0
        beq     5f
4:      std     r4,0(r6)
        std     r4,8(r6)
        std     r4,16(r6)
        std     r4,24(r6)
        std     r4,32(r6)
        std     r4,40(r6)
        std     r4,48(r6)
        std     r4,56(r6)
        addi    r6,r6,64
        bdnz    4b
5:      srwi.   r0,r5,3
        clrlwi  r5,r5,29
        PPC_MTOCRF      1,r0
        beq     8f
        bf      29,6f
        std     r4,0(r6)
        std     r4,8(r6)
        std     r4,16(r6)
        std     r4,24(r6)
        addi    r6,r6,32
6:      bf      30,7f
        std     r4,0(r6)
        std     r4,8(r6)
        addi    r6,r6,16
7:      bf      31,8f
        std     r4,0(r6)
        addi    r6,r6,8
8:      cmpwi   r5,0
        PPC_MTOCRF      1,r5
        beqlr+
        bf      29,9f
        stw     r4,0(r6)
        addi    r6,r6,4
9:      bf      30,10f
        sth     r4,0(r6)
        addi    r6,r6,2
10:     bflr    31
        stb     r4,0(r6)
        blr

_GLOBAL(memmove)
        cmplw   0,r3,r4
        bgt     .backwards_memcpy
        b       .memcpy

_GLOBAL(backwards_memcpy)
        rlwinm. r7,r5,32-3,3,31         /* r0 = r5 >> 3 */
        add     r6,r3,r5
        add     r4,r4,r5
        beq     2f
        andi.   r0,r6,3
        mtctr   r7
        bne     5f
1:      lwz     r7,-4(r4)
        lwzu    r8,-8(r4)
        stw     r7,-4(r6)
        stwu    r8,-8(r6)
        bdnz    1b
        andi.   r5,r5,7
2:      cmplwi  0,r5,4
        blt     3f
        lwzu    r0,-4(r4)
        subi    r5,r5,4
        stwu    r0,-4(r6)
3:      cmpwi   0,r5,0
        beqlr
        mtctr   r5
4:      lbzu    r0,-1(r4)
        stbu    r0,-1(r6)
        bdnz    4b
        blr
5:      mtctr   r0
6:      lbzu    r7,-1(r4)
        stbu    r7,-1(r6)
        bdnz    6b
        subf    r5,r0,r5
        rlwinm. r7,r5,32-3,3,31
        beq     2b
        mtctr   r7
        b       1b

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.