diff options
author | Torbjorn Granlund <tege@gmplib.org> | 2012-11-25 21:58:17 +0100 |
---|---|---|
committer | Torbjorn Granlund <tege@gmplib.org> | 2012-11-25 21:58:17 +0100 |
commit | f15c32d8302975e3b53f62b16944190e730a92c6 (patch) | |
tree | fc73ac06b4d4fcfd056f7259d0c33b2cc40c32ac /mpn/vax | |
parent | 8a970c76433b665cb20d639619dc394675a7c46e (diff) | |
download | gmp-f15c32d8302975e3b53f62b16944190e730a92c6.tar.gz |
Modernise VAX support.
Diffstat (limited to 'mpn/vax')
-rw-r--r-- | mpn/vax/add_n.asm | 53 | ||||
-rw-r--r-- | mpn/vax/add_n.s | 59 | ||||
-rw-r--r-- | mpn/vax/addmul_1.asm | 113 | ||||
-rw-r--r-- | mpn/vax/addmul_1.s | 124 | ||||
-rw-r--r-- | mpn/vax/elf.m4 | 43 | ||||
-rw-r--r-- | mpn/vax/lshift.asm | 48 | ||||
-rw-r--r-- | mpn/vax/lshift.s | 56 | ||||
-rw-r--r-- | mpn/vax/mul_1.asm | 107 | ||||
-rw-r--r-- | mpn/vax/mul_1.s | 121 | ||||
-rw-r--r-- | mpn/vax/rshift.asm | 46 | ||||
-rw-r--r-- | mpn/vax/rshift.s | 54 | ||||
-rw-r--r-- | mpn/vax/sub_n.asm | 53 | ||||
-rw-r--r-- | mpn/vax/sub_n.s | 59 | ||||
-rw-r--r-- | mpn/vax/submul_1.asm | 113 | ||||
-rw-r--r-- | mpn/vax/submul_1.s | 124 |
15 files changed, 576 insertions, 597 deletions
diff --git a/mpn/vax/add_n.asm b/mpn/vax/add_n.asm new file mode 100644 index 000000000..1854bec6a --- /dev/null +++ b/mpn/vax/add_n.asm @@ -0,0 +1,53 @@ +dnl VAX mpn_add_n -- Add two limb vectors of the same length > 0 and store sum +dnl in a third limb vector. + +dnl Copyright 1999, 2000, 2012 Free Software Foundation, Inc. + +dnl This file is part of the GNU MP Library. + +dnl The GNU MP Library is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU Lesser General Public License as published +dnl by the Free Software Foundation; either version 3 of the License, or (at +dnl your option) any later version. + +dnl The GNU MP Library is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +dnl License for more details. + +dnl You should have received a copy of the GNU Lesser General Public License +dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. + +include(`../config.m4') + +ASM_START() +PROLOGUE(mpn_add_n) + .word 0x0 + movl 16(ap), r0 + movl 12(ap), r1 + movl 8(ap), r2 + movl 4(ap), r3 + mnegl r0, r5 + addl2 $3, r0 + ashl $-2, r0, r0 C unroll loop count + bicl2 $-4, r5 C mask out low 2 bits + movaq (r5)[r5], r5 C 9x + jmp L(top)[r5] + +L(top): movl (r2)+, r4 + adwc (r1)+, r4 + movl r4, (r3)+ + movl (r2)+, r4 + adwc (r1)+, r4 + movl r4, (r3)+ + movl (r2)+, r4 + adwc (r1)+, r4 + movl r4, (r3)+ + movl (r2)+, r4 + adwc (r1)+, r4 + movl r4, (r3)+ + sobgtr r0, L(top) + + adwc r0, r0 + ret +EPILOGUE() diff --git a/mpn/vax/add_n.s b/mpn/vax/add_n.s deleted file mode 100644 index 60773cc34..000000000 --- a/mpn/vax/add_n.s +++ /dev/null @@ -1,59 +0,0 @@ -# VAX __gmpn_add_n -- Add two limb vectors of the same length > 0 and store -# sum in a third limb vector. - -# Copyright 1999, 2000 Free Software Foundation, Inc. - -# This file is part of the GNU MP Library. - -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. - - -# INPUT PARAMETERS -# res_ptr (sp + 4) -# s1_ptr (sp + 8) -# s2_ptr (sp + 12) -# size (sp + 16) - -.text - .align 1 -.globl ___gmpn_add_n -___gmpn_add_n: - .word 0x0 - movl 16(ap),r0 - movl 12(ap),r1 - movl 8(ap),r2 - movl 4(ap),r3 - mnegl r0,r5 - addl2 $3,r0 - ashl $-2,r0,r0 # unroll loop count - bicl2 $-4,r5 # mask out low 2 bits - movaq (r5)[r5],r5 # 9x - jmp Loop(r5) - -Loop: movl (r2)+,r4 - adwc (r1)+,r4 - movl r4,(r3)+ - movl (r2)+,r4 - adwc (r1)+,r4 - movl r4,(r3)+ - movl (r2)+,r4 - adwc (r1)+,r4 - movl r4,(r3)+ - movl (r2)+,r4 - adwc (r1)+,r4 - movl r4,(r3)+ - sobgtr r0,Loop - - adwc r0,r0 - ret diff --git a/mpn/vax/addmul_1.asm b/mpn/vax/addmul_1.asm new file mode 100644 index 000000000..a4bd311c1 --- /dev/null +++ b/mpn/vax/addmul_1.asm @@ -0,0 +1,113 @@ +dnl VAX mpn_addmul_1 -- Multiply a limb vector with a limb and add the result +dnl to a second limb vector. + +dnl Copyright 1992, 1994, 1996, 2000, 2012 Free Software Foundation, Inc. + +dnl This file is part of the GNU MP Library. + +dnl The GNU MP Library is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU Lesser General Public License as published +dnl by the Free Software Foundation; either version 3 of the License, or (at +dnl your option) any later version. + +dnl The GNU MP Library is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +dnl License for more details. + +dnl You should have received a copy of the GNU Lesser General Public License +dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. + +include(`../config.m4') + +ASM_START() +PROLOGUE(mpn_addmul_1) + .word 0xfc0 + movl 12(ap), r4 + movl 8(ap), r8 + movl 4(ap), r9 + clrl r3 + incl r4 + ashl $-1, r4, r7 + clrl r11 + movl 16(ap), r6 + jlss L(v0_big) + jlbc r4, L(1) + +C Loop for v0 < 0x80000000 +L(tp1): movl (r8)+, r1 + jlss L(1n0) + emul r1, r6, $0, r2 + addl2 r11, r2 + adwc $0, r3 + addl2 r2, (r9)+ + adwc $0, r3 +L(1): movl (r8)+, r1 + jlss L(1n1) +L(1p1): emul r1, r6, $0, r10 + addl2 r3, r10 + adwc $0, r11 + addl2 r10, (r9)+ + adwc $0, r11 + + sobgtr r7, L(tp1) + movl r11, r0 + ret + +L(1n0): emul r1, r6, $0, r2 + addl2 r11, r2 + adwc r6, r3 + addl2 r2, (r9)+ + adwc $0, r3 + movl (r8)+, r1 + jgeq L(1p1) +L(1n1): emul r1, r6, $0, r10 + addl2 r3, r10 + adwc r6, r11 + addl2 r10, (r9)+ + adwc $0, r11 + + sobgtr r7, L(tp1) + movl r11, r0 + ret + +L(v0_big): + jlbc r4, L(2) + +C Loop for v0 >= 0x80000000 +L(tp2): movl (r8)+, r1 + jlss L(2n0) + emul r1, r6, $0, r2 + addl2 r11, r2 + adwc r1, r3 + addl2 r2, (r9)+ + adwc $0, r3 +L(2): movl (r8)+, r1 + jlss L(2n1) +L(2p1): emul r1, r6, $0, r10 + addl2 r3, r10 + adwc r1, r11 + addl2 r10, (r9)+ + adwc $0, r11 + + sobgtr r7, L(tp2) + movl r11, r0 + ret + +L(2n0): emul r1, r6, $0, r2 + addl2 r11, r2 + adwc r6, r3 + addl2 r2, (r9)+ + adwc r1, r3 + movl (r8)+, r1 + jgeq L(2p1) +L(2n1): emul r1, r6, $0, r10 + addl2 r3, r10 + adwc r6, r11 + addl2 r10, (r9)+ + adwc r1, r11 + + sobgtr r7, L(tp2) + movl r11, r0 + ret +EPILOGUE() diff --git a/mpn/vax/addmul_1.s b/mpn/vax/addmul_1.s deleted file mode 100644 index e2f86e074..000000000 --- a/mpn/vax/addmul_1.s +++ /dev/null @@ -1,124 +0,0 @@ -# VAX __gmpn_addmul_1 -- Multiply a limb vector with a limb and add -# the result to a second limb vector. - -# Copyright 1992, 1994, 1996, 2000 Free Software Foundation, Inc. - -# This file is part of the GNU MP Library. - -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. - - -# INPUT PARAMETERS -# res_ptr (sp + 4) -# s1_ptr (sp + 8) -# size (sp + 12) -# s2_limb (sp + 16) - -.text - .align 1 -.globl ___gmpn_addmul_1 -___gmpn_addmul_1: - .word 0xfc0 - movl 12(ap),r4 - movl 8(ap),r8 - movl 4(ap),r9 - movl 16(ap),r6 - jlss s2_big - - clrl r3 - incl r4 - ashl $-1,r4,r7 - jlbc r4,L1 - clrl r11 - -# Loop for S2_LIMB < 0x80000000 -Loop1: movl (r8)+,r1 - jlss L1n0 - emul r1,r6,$0,r2 - addl2 r11,r2 - adwc $0,r3 - addl2 r2,(r9)+ - adwc $0,r3 -L1: movl (r8)+,r1 - jlss L1n1 -L1p1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc $0,r11 - addl2 r10,(r9)+ - adwc $0,r11 - - sobgtr r7,Loop1 - movl r11,r0 - ret - -L1n0: emul r1,r6,$0,r2 - addl2 r11,r2 - adwc r6,r3 - addl2 r2,(r9)+ - adwc $0,r3 - movl (r8)+,r1 - jgeq L1p1 -L1n1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc r6,r11 - addl2 r10,(r9)+ - adwc $0,r11 - - sobgtr r7,Loop1 - movl r11,r0 - ret - - -s2_big: clrl r3 - incl r4 - ashl $-1,r4,r7 - jlbc r4,L2 - clrl r11 - -# Loop for S2_LIMB >= 0x80000000 -Loop2: movl (r8)+,r1 - jlss L2n0 - emul r1,r6,$0,r2 - addl2 r11,r2 - adwc r1,r3 - addl2 r2,(r9)+ - adwc $0,r3 -L2: movl (r8)+,r1 - jlss L2n1 -L2p1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc r1,r11 - addl2 r10,(r9)+ - adwc $0,r11 - - sobgtr r7,Loop2 - movl r11,r0 - ret - -L2n0: emul r1,r6,$0,r2 - addl2 r11,r2 - adwc r6,r3 - addl2 r2,(r9)+ - adwc r1,r3 - movl (r8)+,r1 - jgeq L2p1 -L2n1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc r6,r11 - addl2 r10,(r9)+ - adwc r1,r11 - - sobgtr r7,Loop2 - movl r11,r0 - ret diff --git a/mpn/vax/elf.m4 b/mpn/vax/elf.m4 new file mode 100644 index 000000000..4946c98dc --- /dev/null +++ b/mpn/vax/elf.m4 @@ -0,0 +1,43 @@ +divert(-1) + +dnl m4 macros for VAX assembler. + +dnl Copyright 2001, 2012 Free Software Foundation, Inc. +dnl +dnl This file is part of the GNU MP Library. +dnl +dnl The GNU MP Library is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Lesser General Public License as +dnl published by the Free Software Foundation; either version 3 of the +dnl License, or (at your option) any later version. +dnl +dnl The GNU MP Library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Lesser General Public License for more details. +dnl +dnl You should have received a copy of the GNU Lesser General Public License +dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. + + +defreg(r0,`%r``''0') +defreg(r1,`%r``''1') +defreg(r2,`%r``''2') +defreg(r3,`%r``''3') +defreg(r4,`%r``''4') +defreg(r5,`%r``''5') +defreg(r6,`%r``''6') +defreg(r7,`%r``''7') +defreg(r8,`%r``''8') +defreg(r9,`%r``''9') +defreg(r10,`%r``''10') +defreg(r11,`%r``''11') +defreg(r12,`%r``''12') +defreg(r13,`%r``''13') +defreg(r14,`%r``''14') +defreg(r15,`%r``''15') +defreg(ap,`%a``''p') + +define(`foo', blablabla) + +divert diff --git a/mpn/vax/lshift.asm b/mpn/vax/lshift.asm new file mode 100644 index 000000000..dd22c64a6 --- /dev/null +++ b/mpn/vax/lshift.asm @@ -0,0 +1,48 @@ +dnl VAX mpn_lshift -- left shift. + +dnl Copyright 1999, 2000, 2001, 2012 Free Software Foundation, Inc. + +dnl This file is part of the GNU MP Library. + +dnl The GNU MP Library is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU Lesser General Public License as published +dnl by the Free Software Foundation; either version 3 of the License, or (at +dnl your option) any later version. + +dnl The GNU MP Library is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +dnl License for more details. + +dnl You should have received a copy of the GNU Lesser General Public License +dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. + +include(`../config.m4') + +ASM_START() +PROLOGUE(mpn_lshift) + .word 0x1c0 + movl 4(ap), r7 + movl 8(ap), r6 + movl 12(ap), r1 + movl 16(ap), r8 + + moval (r6)[r1], r6 + moval (r7)[r1], r7 + clrl r3 + movl -(r6), r2 + ashq r8, r2, r4 + movl r5, r0 + movl r2, r3 + decl r1 + jeql L(end) + +L(top): movl -(r6), r2 + ashq r8, r2, r4 + movl r5, -(r7) + movl r2, r3 + sobgtr r1, L(top) + +L(end): movl r4, -4(r7) + ret +EPILOGUE() diff --git a/mpn/vax/lshift.s b/mpn/vax/lshift.s deleted file mode 100644 index 6f3d600be..000000000 --- a/mpn/vax/lshift.s +++ /dev/null @@ -1,56 +0,0 @@ -# VAX mpn_lshift -- left shift. - -# Copyright 1999, 2000, 2001 Free Software Foundation, Inc. - -# This file is part of the GNU MP Library. - -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. - - -# INPUT PARAMETERS -# rptr (sp + 4) -# sptr (sp + 8) -# size (sp + 12) -# cnt (sp + 16) -# r0=retval r1=size r2,r3=itmp r4,r5=otmp call-used registers -# r6=sptr r7=rptr r8=cnt r9 r10 r11 call-saved registers - -.text - .align 1 -.globl ___gmpn_lshift -___gmpn_lshift: - .word 0x1c0 - movl 4(ap),r7 - movl 8(ap),r6 - movl 12(ap),r1 - movl 16(ap),r8 - - moval (r6)[r1],r6 - moval (r7)[r1],r7 - clrl r3 - movl -(r6),r2 - ashq r8,r2,r4 - movl r5,r0 - movl r2,r3 - decl r1 - jeql Lend - -Loop: movl -(r6),r2 - ashq r8,r2,r4 - movl r5,-(r7) - movl r2,r3 - sobgtr r1,Loop - -Lend: movl r4,-4(r7) - ret diff --git a/mpn/vax/mul_1.asm b/mpn/vax/mul_1.asm new file mode 100644 index 000000000..158847676 --- /dev/null +++ b/mpn/vax/mul_1.asm @@ -0,0 +1,107 @@ +dnl VAX mpn_mul_1 -- Multiply a limb vector with a limb and store the result +dnl in a second limb vector. + +dnl Copyright 1992, 1994, 1996, 2000, 2012 Free Software Foundation, Inc. + +dnl This file is part of the GNU MP Library. + +dnl The GNU MP Library is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU Lesser General Public License as published +dnl by the Free Software Foundation; either version 3 of the License, or (at +dnl your option) any later version. + +dnl The GNU MP Library is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +dnl License for more details. + +dnl You should have received a copy of the GNU Lesser General Public License +dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. + +include(`../config.m4') + +ASM_START() +PROLOGUE(mpn_mul_1) + .word 0xfc0 + movl 12(ap), r4 + movl 8(ap), r8 + movl 4(ap), r9 + clrl r3 + incl r4 + ashl $-1, r4, r7 + clrl r11 + movl 16(ap), r6 + jlss L(v0_big) + jlbc r4, L(1) + +C Loop for v0 < 0x80000000 +L(tp1): movl (r8)+, r1 + jlss L(1n0) + emul r1, r6, $0, r2 + addl2 r11, r2 + adwc $0, r3 + movl r2, (r9)+ +L(1): movl (r8)+, r1 + jlss L(1n1) +L(1p1): emul r1, r6, $0, r10 + addl2 r3, r10 + adwc $0, r11 + movl r10, (r9)+ + + sobgtr r7, L(tp1) + movl r11, r0 + ret + +L(1n0): emul r1, r6, $0, r2 + addl2 r11, r2 + adwc r6, r3 + movl r2, (r9)+ + movl (r8)+, r1 + jgeq L(1p1) +L(1n1): emul r1, r6, $0, r10 + addl2 r3, r10 + adwc r6, r11 + movl r10, (r9)+ + + sobgtr r7, L(tp1) + movl r11, r0 + ret + +L(v0_big): + jlbc r4, L(2) + +C Loop for v0 >= 0x80000000 +L(tp2): movl (r8)+, r1 + jlss L(2n0) + emul r1, r6, $0, r2 + addl2 r11, r2 + adwc r1, r3 + movl r2, (r9)+ +L(2): movl (r8)+, r1 + jlss L(2n1) +L(2p1): emul r1, r6, $0, r10 + addl2 r3, r10 + adwc r1, r11 + movl r10, (r9)+ + + sobgtr r7, L(tp2) + movl r11, r0 + ret + +L(2n0): emul r1, r6, $0, r2 + addl2 r1, r3 + addl2 r11, r2 + adwc r6, r3 + movl r2, (r9)+ + movl (r8)+, r1 + jgeq L(2p1) +L(2n1): emul r1, r6, $0, r10 + addl2 r1, r11 + addl2 r3, r10 + adwc r6, r11 + movl r10, (r9)+ + + sobgtr r7, L(tp2) + movl r11, r0 + ret +EPILOGUE() diff --git a/mpn/vax/mul_1.s b/mpn/vax/mul_1.s deleted file mode 100644 index c6f4594bd..000000000 --- a/mpn/vax/mul_1.s +++ /dev/null @@ -1,121 +0,0 @@ -# VAX __gmpn_mul_1 -- Multiply a limb vector with a limb and store -# the result in a second limb vector. - -# Copyright 1992, 1994, 1996, 2000 Free Software Foundation, Inc. - -# This file is part of the GNU MP Library. - -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. - - -# INPUT PARAMETERS -# res_ptr (sp + 4) -# s1_ptr (sp + 8) -# size (sp + 12) -# s2_limb (sp + 16) - -.text - .align 1 -.globl ___gmpn_mul_1 -___gmpn_mul_1: - .word 0xfc0 - movl 12(ap),r4 - movl 8(ap),r8 - movl 4(ap),r9 - movl 16(ap),r6 - jlss s2_big - -# One might want to combine the addl2 and the store below, but that -# is actually just slower according to my timing tests. (VAX 3600) - - clrl r3 - incl r4 - ashl $-1,r4,r7 - jlbc r4,L1 - clrl r11 - -# Loop for S2_LIMB < 0x80000000 -Loop1: movl (r8)+,r1 - jlss L1n0 - emul r1,r6,$0,r2 - addl2 r11,r2 - adwc $0,r3 - movl r2,(r9)+ -L1: movl (r8)+,r1 - jlss L1n1 -L1p1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc $0,r11 - movl r10,(r9)+ - - sobgtr r7,Loop1 - movl r11,r0 - ret - -L1n0: emul r1,r6,$0,r2 - addl2 r11,r2 - adwc r6,r3 - movl r2,(r9)+ - movl (r8)+,r1 - jgeq L1p1 -L1n1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc r6,r11 - movl r10,(r9)+ - - sobgtr r7,Loop1 - movl r11,r0 - ret - - -s2_big: clrl r3 - incl r4 - ashl $-1,r4,r7 - jlbc r4,L2 - clrl r11 - -# Loop for S2_LIMB >= 0x80000000 -Loop2: movl (r8)+,r1 - jlss L2n0 - emul r1,r6,$0,r2 - addl2 r11,r2 - adwc r1,r3 - movl r2,(r9)+ -L2: movl (r8)+,r1 - jlss L2n1 -L2p1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc r1,r11 - movl r10,(r9)+ - - sobgtr r7,Loop2 - movl r11,r0 - ret - -L2n0: emul r1,r6,$0,r2 - addl2 r1,r3 - addl2 r11,r2 - adwc r6,r3 - movl r2,(r9)+ - movl (r8)+,r1 - jgeq L2p1 -L2n1: emul r1,r6,$0,r10 - addl2 r1,r11 - addl2 r3,r10 - adwc r6,r11 - movl r10,(r9)+ - - sobgtr r7,Loop2 - movl r11,r0 - ret diff --git a/mpn/vax/rshift.asm b/mpn/vax/rshift.asm new file mode 100644 index 000000000..ffa880640 --- /dev/null +++ b/mpn/vax/rshift.asm @@ -0,0 +1,46 @@ +dnl VAX mpn_rshift -- right shift. + +dnl Copyright 1999, 2000, 2001, 2012 Free Software Foundation, Inc. + +dnl This file is part of the GNU MP Library. + +dnl The GNU MP Library is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU Lesser General Public License as published +dnl by the Free Software Foundation; either version 3 of the License, or (at +dnl your option) any later version. + +dnl The GNU MP Library is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +dnl License for more details. + +dnl You should have received a copy of the GNU Lesser General Public License +dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. + +include(`../config.m4') + +ASM_START() +PROLOGUE(mpn_rshift) + .word 0x1c0 + movl 4(ap), r7 + movl 8(ap), r6 + movl 12(ap), r1 + movl 16(ap), r8 + + movl (r6)+, r2 + subl3 r8, $32, r8 + ashl r8, r2, r0 + decl r1 + jeql L(end) + +L(top): movl (r6)+, r3 + ashq r8, r2, r4 + movl r5, (r7)+ + movl r3, r2 + sobgtr r1, L(top) + +L(end): clrl r3 + ashq r8, r2, r4 + movl r5, (r7) + ret +EPILOGUE() diff --git a/mpn/vax/rshift.s b/mpn/vax/rshift.s deleted file mode 100644 index ae27208e2..000000000 --- a/mpn/vax/rshift.s +++ /dev/null @@ -1,54 +0,0 @@ -# VAX mpn_rshift -- right shift. - -# Copyright 1999, 2000, 2001 Free Software Foundation, Inc. - -# This file is part of the GNU MP Library. - -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. - - -# INPUT PARAMETERS -# rptr (sp + 4) -# sptr (sp + 8) -# size (sp + 12) -# cnt (sp + 16) -# r0=retval r1=size r2,r3=itmp r4,r5=otmp call-used registers -# r6=sptr r7=rptr r8=cnt r9 r10 r11 call-saved registers - -.text - .align 1 -.globl ___gmpn_rshift -___gmpn_rshift: - .word 0x1c0 - movl 4(ap),r7 - movl 8(ap),r6 - movl 12(ap),r1 - movl 16(ap),r8 - - movl (r6)+,r2 - subl3 r8,$32,r8 - ashl r8,r2,r0 - decl r1 - jeql Lend - -Loop: movl (r6)+,r3 - ashq r8,r2,r4 - movl r5,(r7)+ - movl r3,r2 - sobgtr r1,Loop - -Lend: clrl r3 - ashq r8,r2,r4 - movl r5,(r7) - ret diff --git a/mpn/vax/sub_n.asm b/mpn/vax/sub_n.asm new file mode 100644 index 000000000..450449793 --- /dev/null +++ b/mpn/vax/sub_n.asm @@ -0,0 +1,53 @@ +dnl VAX mpn_sub_n -- Subtract two limb vectors of the same length > 0 and +dnl store difference in a third limb vector. + +dnl Copyright 1999, 2000, 2012 Free Software Foundation, Inc. + +dnl This file is part of the GNU MP Library. + +dnl The GNU MP Library is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU Lesser General Public License as published +dnl by the Free Software Foundation; either version 3 of the License, or (at +dnl your option) any later version. + +dnl The GNU MP Library is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +dnl License for more details. + +dnl You should have received a copy of the GNU Lesser General Public License +dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. + +include(`../config.m4') + +ASM_START() +PROLOGUE(mpn_sub_n) + .word 0x0 + movl 16(ap), r0 + movl 12(ap), r1 + movl 8(ap), r2 + movl 4(ap), r3 + mnegl r0, r5 + addl2 $3, r0 + ashl $-2, r0, r0 C unroll loop count + bicl2 $-4, r5 C mask out low 2 bits + movaq (r5)[r5], r5 C 9x + jmp L(top)[r5] + +L(top): movl (r2)+, r4 + sbwc (r1)+, r4 + movl r4, (r3)+ + movl (r2)+, r4 + sbwc (r1)+, r4 + movl r4, (r3)+ + movl (r2)+, r4 + sbwc (r1)+, r4 + movl r4, (r3)+ + movl (r2)+, r4 + sbwc (r1)+, r4 + movl r4, (r3)+ + sobgtr r0, L(top) + + adwc r0, r0 + ret +EPILOGUE() diff --git a/mpn/vax/sub_n.s b/mpn/vax/sub_n.s deleted file mode 100644 index c9ad1ecfb..000000000 --- a/mpn/vax/sub_n.s +++ /dev/null @@ -1,59 +0,0 @@ -# VAX __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and store -# difference in a third limb vector. - -# Copyright 1999, 2000 Free Software Foundation, Inc. - -# This file is part of the GNU MP Library. - -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. - - -# INPUT PARAMETERS -# res_ptr (sp + 4) -# s1_ptr (sp + 8) -# s2_ptr (sp + 12) -# size (sp + 16) - -.text - .align 1 -.globl ___gmpn_sub_n -___gmpn_sub_n: - .word 0x0 - movl 16(ap),r0 - movl 12(ap),r1 - movl 8(ap),r2 - movl 4(ap),r3 - mnegl r0,r5 - addl2 $3,r0 - ashl $-2,r0,r0 # unroll loop count - bicl2 $-4,r5 # mask out low 2 bits - movaq (r5)[r5],r5 # 9x - jmp Loop(r5) - -Loop: movl (r2)+,r4 - sbwc (r1)+,r4 - movl r4,(r3)+ - movl (r2)+,r4 - sbwc (r1)+,r4 - movl r4,(r3)+ - movl (r2)+,r4 - sbwc (r1)+,r4 - movl r4,(r3)+ - movl (r2)+,r4 - sbwc (r1)+,r4 - movl r4,(r3)+ - sobgtr r0,Loop - - adwc r0,r0 - ret diff --git a/mpn/vax/submul_1.asm b/mpn/vax/submul_1.asm new file mode 100644 index 000000000..06277d1d9 --- /dev/null +++ b/mpn/vax/submul_1.asm @@ -0,0 +1,113 @@ +dnl VAX mpn_submul_1 -- Multiply a limb vector with a limb and subtract the +dnl result from a second limb vector. + +dnl Copyright 1992, 1994, 1996, 2000, 2012 Free Software Foundation, Inc. + +dnl This file is part of the GNU MP Library. + +dnl The GNU MP Library is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU Lesser General Public License as published +dnl by the Free Software Foundation; either version 3 of the License, or (at +dnl your option) any later version. + +dnl The GNU MP Library is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +dnl License for more details. + +dnl You should have received a copy of the GNU Lesser General Public License +dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. + +include(`../config.m4') + +ASM_START() +PROLOGUE(mpn_submul_1) + .word 0xfc0 + movl 12(ap), r4 + movl 8(ap), r8 + movl 4(ap), r9 + clrl r3 + incl r4 + ashl $-1, r4, r7 + clrl r11 + movl 16(ap), r6 + jlss L(v0_big) + jlbc r4, L(1) + +C Loop for v0 < 0x80000000 +L(tp1): movl (r8)+, r1 + jlss L(1n0) + emul r1, r6, $0, r2 + addl2 r11, r2 + adwc $0, r3 + subl2 r2, (r9)+ + adwc $0, r3 +L(1): movl (r8)+, r1 + jlss L(1n1) +L(1p1): emul r1, r6, $0, r10 + addl2 r3, r10 + adwc $0, r11 + subl2 r10, (r9)+ + adwc $0, r11 + + sobgtr r7, L(tp1) + movl r11, r0 + ret + +L(1n0): emul r1, r6, $0, r2 + addl2 r11, r2 + adwc r6, r3 + subl2 r2, (r9)+ + adwc $0, r3 + movl (r8)+, r1 + jgeq L(1p1) +L(1n1): emul r1, r6, $0, r10 + addl2 r3, r10 + adwc r6, r11 + subl2 r10, (r9)+ + adwc $0, r11 + + sobgtr r7, L(tp1) + movl r11, r0 + ret + +L(v0_big): + jlbc r4, L(2) + +C Loop for v0 >= 0x80000000 +L(tp2): movl (r8)+, r1 + jlss L(2n0) + emul r1, r6, $0, r2 + addl2 r11, r2 + adwc r1, r3 + subl2 r2, (r9)+ + adwc $0, r3 +L(2): movl (r8)+, r1 + jlss L(2n1) +L(2p1): emul r1, r6, $0, r10 + addl2 r3, r10 + adwc r1, r11 + subl2 r10, (r9)+ + adwc $0, r11 + + sobgtr r7, L(tp2) + movl r11, r0 + ret + +L(2n0): emul r1, r6, $0, r2 + addl2 r11, r2 + adwc r6, r3 + subl2 r2, (r9)+ + adwc r1, r3 + movl (r8)+, r1 + jgeq L(2p1) +L(2n1): emul r1, r6, $0, r10 + addl2 r3, r10 + adwc r6, r11 + subl2 r10, (r9)+ + adwc r1, r11 + + sobgtr r7, L(tp2) + movl r11, r0 + ret +EPILOGUE() diff --git a/mpn/vax/submul_1.s b/mpn/vax/submul_1.s deleted file mode 100644 index ad0ddbbac..000000000 --- a/mpn/vax/submul_1.s +++ /dev/null @@ -1,124 +0,0 @@ -# VAX __gmpn_submul_1 -- Multiply a limb vector with a limb and subtract -# the result from a second limb vector. - -# Copyright 1992, 1994, 1996, 2000 Free Software Foundation, Inc. - -# This file is part of the GNU MP Library. - -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. - - -# INPUT PARAMETERS -# res_ptr (sp + 4) -# s1_ptr (sp + 8) -# size (sp + 12) -# s2_limb (sp + 16) - -.text - .align 1 -.globl ___gmpn_submul_1 -___gmpn_submul_1: - .word 0xfc0 - movl 12(ap),r4 - movl 8(ap),r8 - movl 4(ap),r9 - movl 16(ap),r6 - jlss s2_big - - clrl r3 - incl r4 - ashl $-1,r4,r7 - jlbc r4,L1 - clrl r11 - -# Loop for S2_LIMB < 0x80000000 -Loop1: movl (r8)+,r1 - jlss L1n0 - emul r1,r6,$0,r2 - addl2 r11,r2 - adwc $0,r3 - subl2 r2,(r9)+ - adwc $0,r3 -L1: movl (r8)+,r1 - jlss L1n1 -L1p1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc $0,r11 - subl2 r10,(r9)+ - adwc $0,r11 - - sobgtr r7,Loop1 - movl r11,r0 - ret - -L1n0: emul r1,r6,$0,r2 - addl2 r11,r2 - adwc r6,r3 - subl2 r2,(r9)+ - adwc $0,r3 - movl (r8)+,r1 - jgeq L1p1 -L1n1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc r6,r11 - subl2 r10,(r9)+ - adwc $0,r11 - - sobgtr r7,Loop1 - movl r11,r0 - ret - - -s2_big: clrl r3 - incl r4 - ashl $-1,r4,r7 - jlbc r4,L2 - clrl r11 - -# Loop for S2_LIMB >= 0x80000000 -Loop2: movl (r8)+,r1 - jlss L2n0 - emul r1,r6,$0,r2 - addl2 r11,r2 - adwc r1,r3 - subl2 r2,(r9)+ - adwc $0,r3 -L2: movl (r8)+,r1 - jlss L2n1 -L2p1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc r1,r11 - subl2 r10,(r9)+ - adwc $0,r11 - - sobgtr r7,Loop2 - movl r11,r0 - ret - -L2n0: emul r1,r6,$0,r2 - addl2 r11,r2 - adwc r6,r3 - subl2 r2,(r9)+ - adwc r1,r3 - movl (r8)+,r1 - jgeq L2p1 -L2n1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc r6,r11 - subl2 r10,(r9)+ - adwc r1,r11 - - sobgtr r7,Loop2 - movl r11,r0 - ret |