xref: /netbsd-src/external/lgpl3/gmp/dist/mpn/powerpc32/750/com.asm (revision 122b5006ee1bd67145794b4cde92f4fe4781a5ec)
1dnl  PowerPC 750 mpn_com -- mpn bitwise one's complement
2
3dnl  Copyright 2002, 2003 Free Software Foundation, Inc.
4
5dnl  This file is part of the GNU MP Library.
6dnl
7dnl  The GNU MP Library is free software; you can redistribute it and/or modify
8dnl  it under the terms of either:
9dnl
10dnl    * the GNU Lesser General Public License as published by the Free
11dnl      Software Foundation; either version 3 of the License, or (at your
12dnl      option) any later version.
13dnl
14dnl  or
15dnl
16dnl    * the GNU General Public License as published by the Free Software
17dnl      Foundation; either version 2 of the License, or (at your option) any
18dnl      later version.
19dnl
20dnl  or both in parallel, as here.
21dnl
22dnl  The GNU MP Library is distributed in the hope that it will be useful, but
23dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
24dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
25dnl  for more details.
26dnl
27dnl  You should have received copies of the GNU General Public License and the
28dnl  GNU Lesser General Public License along with the GNU MP Library.  If not,
29dnl  see https://www.gnu.org/licenses/.
30
31include(`../config.m4')
32
33
34C                cycles/limb
35C 603e:            ?
36C 604e:            3.0
37C 75x (G3):        2.0
38C 7400,7410 (G4):  2.0
39C 744x,745x (G4+): 3.0
40
41C void mpn_com (mp_ptr dst, mp_srcptr src, mp_size_t size);
42C
43C This loop form is necessary for the claimed speed.
44
45ASM_START()
46PROLOGUE(mpn_com)
47
48	C r3	dst
49	C r4	src
50	C r5	size
51
52	mtctr	r5		C size
53	lwz	r5, 0(r4)	C src low limb
54
55	sub	r4, r4, r3	C src-dst
56	subi	r3, r3, 4	C dst-4
57
58	addi	r4, r4, 8	C src-dst+8
59	bdz	L(one)
60
61L(top):
62	C r3	&dst[i-1]
63	C r4	src-dst
64	C r5	src[i]
65	C r6	scratch
66
67	not	r6, r5		C ~src[i]
68	lwzx	r5, r4,r3	C src[i+1]
69
70	stwu	r6, 4(r3)	C dst[i]
71	bdnz	L(top)
72
73L(one):
74	not	r6, r5
75
76	stw	r6, 4(r3)	C dst[size-1]
77	blr
78
79EPILOGUE()
80