1*ce099b40Smartin/* $NetBSD: bzero.S,v 1.4 2008/04/28 20:22:57 martin Exp $ */ 2fefc484dSross 3d48f1466Sross/*- 47008de4cSross * Copyright (c) 2006 The NetBSD Foundation, Inc. 5d48f1466Sross * All rights reserved. 6d48f1466Sross * 77008de4cSross * This code is derived from software contributed to The NetBSD Foundation 87008de4cSross * by Ross Harvey. 97008de4cSross * 10d48f1466Sross * Redistribution and use in source and binary forms, with or without 11d48f1466Sross * modification, are permitted provided that the following conditions 12d48f1466Sross * are met: 13d48f1466Sross * 1. Redistributions of source code must retain the above copyright 14d48f1466Sross * notice, this list of conditions and the following disclaimer. 15d48f1466Sross * 2. Redistributions in binary form must reproduce the above copyright 16d48f1466Sross * notice, this list of conditions and the following disclaimer in the 17d48f1466Sross * documentation and/or other materials provided with the distribution. 18d48f1466Sross * 197008de4cSross * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 207008de4cSross * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 217008de4cSross * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 227008de4cSross * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 237008de4cSross * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 247008de4cSross * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 257008de4cSross * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 267008de4cSross * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 277008de4cSross * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 287008de4cSross * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 297008de4cSross * POSSIBILITY OF SUCH DAMAGE. 30d48f1466Sross */ 31d48f1466Sross 32d48f1466Sross#include <machine/asm.h> 33d48f1466Sross 347008de4cSross .file "bzero.c" 35d48f1466SrossENTRY(bzero) 367008de4cSross mr 5, 4 # translate to memcpy signature 377008de4cSross li 4, 0 # add missing memcpy param 38d48f1466SrossENTRY(memset) 397008de4cSross cmpldi 7, 5, 7 # only optimize if len >= 8 407008de4cSross mr 9, 3 417008de4cSross ble 7, 2f 427008de4cSross rldicl. 0, 3, 0, 61 # only optimize if aligned 437008de4cSross beq 0, 4f 447008de4cSross2: 457008de4cSross cmpdi 7, 5, 0 467008de4cSross beqlr 7 477008de4cSross3: 487008de4cSross mtctr 5 497008de4cSross rldicl 0, 4, 0, 56 507008de4cSross .p2align 4,, 15 517008de4cSross2: 527008de4cSross stb 0, 0(9) # byte-at-a-time loop 537008de4cSross addi 9, 9, 1 547008de4cSross bdnz 2b 557008de4cSross blr # done 567008de4cSross4: 577008de4cSross rldicl 4, 4, 0, 56 # construct parallel store 587008de4cSross cmpldi 7, 5, 31 597008de4cSross mr 10, 3 607008de4cSross sldi 0, 4, 8 617008de4cSross or 0, 0, 4 627008de4cSross sldi 9, 0, 16 637008de4cSross or 0, 0, 9 647008de4cSross sldi 11, 0, 32 657008de4cSross or 0, 0, 11 667008de4cSross ble 7, 5f 677008de4cSross addi 9, 5, -32 687008de4cSross srdi 9, 9, 5 697008de4cSross addi 9, 9, 1 707008de4cSross mtctr 9 717008de4cSross .p2align 4,, 15 727008de4cSross2: 737008de4cSross std 0, 0(10) # 8-way + unrolled store loop 747008de4cSross std 0, 8(10) 757008de4cSross addi 5, 5, -32 # schedule count decrement 767008de4cSross std 0, 16(10) 777008de4cSross std 0, 24(10) 787008de4cSross addi 10, 10, 32 797008de4cSross bdnz 2b 807008de4cSross cmpldi 7, 5, 7 817008de4cSross ble 7, 8f 827008de4cSross5: 837008de4cSross addi 9, 5, -8 847008de4cSross srdi 9, 9, 3 857008de4cSross addi 9, 9, 1 867008de4cSross mtctr 9 877008de4cSross .p2align 4,, 15 887008de4cSross14: 897008de4cSross std 0, 0(10) # 8-way not-unrolled loop 907008de4cSross addi 5, 5, -8 917008de4cSross addi 10, 10, 8 927008de4cSross bdnz 14b 937008de4cSross8: 947008de4cSross cmpdi 7, 5, 0 957008de4cSross mr 9, 10 967008de4cSross bne 7, 3b 977008de4cSross blr 987008de4cSross .long 0 997008de4cSross .byte 0, 0, 0, 0, 0, 0, 0, 0 1007008de4cSross .size .memset, .-.memset 101