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