1/* This is a generated file. DO NOT EDIT. */ 2/* 3 * Generated from: 4 * 5 * OpenBSD: bcopy.m4 6 */ 7/* 8 * Copyright (c) 1999 Michael Shalayeff 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS' AND ANY EXPRESS OR 21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 22 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 23 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 24 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 25 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 * 31 */ 32 33 34 35#undef _LOCORE 36#define _LOCORE 37#include <machine/asm.h> 38#include <machine/frame.h> 39 40LEAF_ENTRY(memcpy) 41ALTENTRY(memmove) 42 copy arg0, t1 43 copy arg1, arg0 44 copy t1, arg1 45 copy arg0, ret0 46ALTENTRY(ovbcopy) 47ALTENTRY(bcopy) 48 comb,>,n arg1, arg0, $bcopy.reverse 49 50 comib,>=,n 15, arg2, $bcopy_f.byte 51 52 extru arg0, 31, 2, t3 53 extru arg1, 31, 2, t4 54 add arg2, t4, arg2 55 comb,<> t3, t4, $bcopy_f.unaligned 56 dep r0, 31, 2, arg0 57 58 addi -16, arg2, arg2 59$bcopy_f.loop16a 60 ldws,ma 4(sr0, arg0), t1 61 ldws,ma 4(sr0, arg0), t2 62 ldws,ma 4(sr0, arg0), t3 63 ldws,ma 4(sr0, arg0), t4 64 stbys,b,m t1, 4(sr0, arg1) 65 stws,ma t2, 4(sr0, arg1) 66 stws,ma t3, 4(sr0, arg1) 67 addib,>= -16, arg2, $bcopy_f.loop16a 68 stws,ma t4, 4(sr0, arg1) 69 70 addib,<,n 12, arg2, $bcopy_f.cleanup 71$bcopy_f.word 72 ldws,ma 4(sr0, arg0), t1 73 addib,>= -4, arg2, $bcopy_f.word 74 stws,ma t1, 4(sr0, arg1) 75 76$bcopy_f.cleanup 77 addib,=,n 4, arg2, $bcopy_f.done 78 ldws 0(sr0, arg0), t1 79 add arg1, arg2, arg1 80 b $bcopy_f.done 81 stbys,e t1, 0(sr0, arg1) 82 83$bcopy_f.unaligned 84 sub,>= t4, t3, t2 85 ldwm 4(sr0, arg0), ret1 86 zdep t2, 28, 29, t1 87 mtsar t1 88 89 addi -16, arg2, arg2 90$bcopy_f.loop16u 91 ldws,ma 4(sr0, arg0), t1 92 ldws,ma 4(sr0, arg0), t2 93 ldws,ma 4(sr0, arg0), t3 94 ldws,ma 4(sr0, arg0), t4 95 vshd ret1, t1, r31 96 stbys,b,m r31, 4(sr0, arg1) 97 vshd t1, t2, r31 98 stws,ma r31, 4(sr0, arg1) 99 vshd t2, t3, r31 100 stws,ma r31, 4(sr0, arg1) 101 vshd t3, t4, r31 102 stws,ma r31, 4(sr0, arg1) 103 addib,>= -16, arg2, $bcopy_f.loop16u 104 copy t4, ret1 105 106 addib,<,n 12, arg2, $bcopy_f.cleanup_un 107$bcopy_f.word_un 108 ldws,ma 4(sr0, arg0), t1 109 vshd ret1, t1, t2 110 addib,< -4, arg2, $bcopy_f.cleanup1_un 111 stws,ma t2, 4(sr0, arg1) 112 ldws,ma 4(sr0, arg0), ret1 113 vshd t1, ret1, t2 114 addib,>= -4, arg2, $bcopy_f.word_un 115 stws,ma t2, 4(sr0, arg1) 116 117$bcopy_f.cleanup_un 118 addib,<=,n 4, arg2, $bcopy_f.done 119 mfctl sar, t4 120 add arg1, arg2, arg1 121 extru t4, 28, 2, t4 122 sub,<= arg2, t4, r0 123 ldws,ma 4(sr0, arg0), t1 124 vshd ret1, t1, t2 125 b $bcopy_f.done 126 stbys,e t2, 0(sr0, arg1) 127 128$bcopy_f.cleanup1_un 129 b $bcopy_f.cleanup_un 130 copy t1, ret1 131 132$bcopy_f.byte 133 comb,>=,n r0, arg2, $bcopy_f.done 134$bcopy_f.byte_loop 135 ldbs,ma 1(sr0, arg0), t1 136 addib,<> -1, arg2, $bcopy_f.byte_loop 137 stbs,ma t1, 1(sr0, arg1) 138$bcopy_f.done 139 140 bv 0(rp) 141 nop 142$bcopy.reverse 143 add arg0, arg2, arg0 144 add arg1, arg2, arg1 145 146 147$bcopy_r.byte 148 comb,>=,n r0, arg2, $bcopy_r.done 149$bcopy_r.byte_loop 150 ldbs,mb -1(sr0, arg0), t1 151 addib,<> -1, arg2, $bcopy_r.byte_loop 152 stbs,mb t1, -1(sr0, arg1) 153$bcopy_r.done 154 155 bv 0(rp) 156 nop 157EXIT(memcpy) 158 159 .end 160