xref: /openbsd-src/lib/libc/arch/hppa/string/memmove.S (revision b247cc180091d8af1ee36708f2f8076965851bb9)
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