1/* 2 * String handling functions for PowerPC. 3 * 4 * Copyright (C) 1996 Paul Mackerras. 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 9 * 2 of the License, or (at your option) any later version. 10 */ 11#include <asm/processor.h> 12#include <asm/errno.h> 13#include <asm/ppc_asm.h> 14 15_GLOBAL(memset) 16 neg r0,r3 17 rlwimi r4,r4,8,16,23 18 andi. r0,r0,7 /* # bytes to be 8-byte aligned */ 19 rlwimi r4,r4,16,0,15 20 cmplw cr1,r5,r0 /* do we get that far? */ 21 rldimi r4,r4,32,0 22 PPC_MTOCRF(1,r0) 23 mr r6,r3 24 blt cr1,8f 25 beq+ 3f /* if already 8-byte aligned */ 26 subf r5,r0,r5 27 bf 31,1f 28 stb r4,0(r6) 29 addi r6,r6,1 301: bf 30,2f 31 sth r4,0(r6) 32 addi r6,r6,2 332: bf 29,3f 34 stw r4,0(r6) 35 addi r6,r6,4 363: srdi. r0,r5,6 37 clrldi r5,r5,58 38 mtctr r0 39 beq 5f 40 .balign 16 414: std r4,0(r6) 42 std r4,8(r6) 43 std r4,16(r6) 44 std r4,24(r6) 45 std r4,32(r6) 46 std r4,40(r6) 47 std r4,48(r6) 48 std r4,56(r6) 49 addi r6,r6,64 50 bdnz 4b 515: srwi. r0,r5,3 52 clrlwi r5,r5,29 53 PPC_MTOCRF(1,r0) 54 beq 8f 55 bf 29,6f 56 std r4,0(r6) 57 std r4,8(r6) 58 std r4,16(r6) 59 std r4,24(r6) 60 addi r6,r6,32 616: bf 30,7f 62 std r4,0(r6) 63 std r4,8(r6) 64 addi r6,r6,16 657: bf 31,8f 66 std r4,0(r6) 67 addi r6,r6,8 688: cmpwi r5,0 69 PPC_MTOCRF(1,r5) 70 beqlr+ 71 bf 29,9f 72 stw r4,0(r6) 73 addi r6,r6,4 749: bf 30,10f 75 sth r4,0(r6) 76 addi r6,r6,2 7710: bflr 31 78 stb r4,0(r6) 79 blr 80 81_GLOBAL_TOC(memmove) 82 cmplw 0,r3,r4 83 bgt backwards_memcpy 84 b memcpy 85 86_GLOBAL(backwards_memcpy) 87 rlwinm. r7,r5,32-3,3,31 /* r0 = r5 >> 3 */ 88 add r6,r3,r5 89 add r4,r4,r5 90 beq 2f 91 andi. r0,r6,3 92 mtctr r7 93 bne 5f 94 .balign 16 951: lwz r7,-4(r4) 96 lwzu r8,-8(r4) 97 stw r7,-4(r6) 98 stwu r8,-8(r6) 99 bdnz 1b 100 andi. r5,r5,7 1012: cmplwi 0,r5,4 102 blt 3f 103 lwzu r0,-4(r4) 104 subi r5,r5,4 105 stwu r0,-4(r6) 1063: cmpwi 0,r5,0 107 beqlr 108 mtctr r5 1094: lbzu r0,-1(r4) 110 stbu r0,-1(r6) 111 bdnz 4b 112 blr 1135: mtctr r0 1146: lbzu r7,-1(r4) 115 stbu r7,-1(r6) 116 bdnz 6b 117 subf r5,r0,r5 118 rlwinm. r7,r5,32-3,3,31 119 beq 2b 120 mtctr r7 121 b 1b 122