diff options
author | Torbjorn Granlund <tege@gmplib.org> | 2012-04-28 20:07:15 +0200 |
---|---|---|
committer | Torbjorn Granlund <tege@gmplib.org> | 2012-04-28 20:07:15 +0200 |
commit | ddbdd9e385e956dc22ab1cecebee61061f1fd3e4 (patch) | |
tree | bdf0ddb99d340bc402764079364b0b057f736194 /mpn/thumb | |
parent | d981c256d5b964a0cd1416134a70cfa575adebb1 (diff) | |
download | gmp-ddbdd9e385e956dc22ab1cecebee61061f1fd3e4.tar.gz |
Replace broken thumb code.
Diffstat (limited to 'mpn/thumb')
-rw-r--r-- | mpn/thumb/add_n.asm | 52 | ||||
-rw-r--r-- | mpn/thumb/add_n.s | 48 | ||||
-rw-r--r-- | mpn/thumb/sub_n.asm | 52 | ||||
-rw-r--r-- | mpn/thumb/sub_n.s | 48 |
4 files changed, 104 insertions, 96 deletions
diff --git a/mpn/thumb/add_n.asm b/mpn/thumb/add_n.asm new file mode 100644 index 000000000..e28a4add3 --- /dev/null +++ b/mpn/thumb/add_n.asm @@ -0,0 +1,52 @@ +dnl ARM/Thumb mpn_add_n. + +dnl Copyright 1997, 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 by +dnl the Free Software Foundation; either version 3 of the License, or (at your +dnl 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') + +C INPUT PARAMETERS +define(`rp', r0) +define(`up', r1) +define(`vp', r2) +define(`n', r3) + +ASM_START() + .thumb +PROLOGUE(mpn_add_nc) + push {r4, r5, r6} + ldr r6, [sp, #12] C init carry save register + sub r6, #1 + b L(top) +EPILOGUE() +PROLOGUE(mpn_add_n) + push {r4, r5, r6} + neg r6, n C init carry save register + +L(top): ldmia up!, {r4} C load next limb from S1 + cmp n, r6 C tricky carry restore + ldmia vp!, {r5} C load next limb from S2 + adc r4, r5 + stmia rp!, {r4} C store result limb to RES + sbc r6, r6 C save negated carry + sub n, #1 + bne L(top) + + add r0, r6, #1 + pop {r4, r5, r6} + bx lr +EPILOGUE() diff --git a/mpn/thumb/add_n.s b/mpn/thumb/add_n.s deleted file mode 100644 index 294cfe6ae..000000000 --- a/mpn/thumb/add_n.s +++ /dev/null @@ -1,48 +0,0 @@ -@ ARM/Thumb mpn_add_n -- Add two limb vectors of the same length > 0 and store -@ sum in a third limb vector. - -@ Copyright 1997, 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 r0 -@ S1_ptr r1 -@ S2_ptr r2 -@ SIZE r3 - -@ NOT TESTED CODE - - .text - .thumb - .align 0 - .global ___gmpn_add_n -___gmpn_add_n: - push {r4, r5, r6, lr} - mov r6, #1 @ init carry save register - -Loop: sub r6, #1 @ restore carry (set iff r6 was 0) - ldmia r1!, {r4} @ load next limb from S1 - ldmia r2!, {r5} @ load next limb from S2 - adc r4, r5 - stmia r0!, {r4} @ store result limb to RES - sbc r6, r6 @ save negated carry - sub r3, #1 - bge Loop @ loop back while remaining count >= 4 - - mov r0, r6 - pop {r4, r5, r6, pc} diff --git a/mpn/thumb/sub_n.asm b/mpn/thumb/sub_n.asm new file mode 100644 index 000000000..7ba737552 --- /dev/null +++ b/mpn/thumb/sub_n.asm @@ -0,0 +1,52 @@ +dnl ARM/Thumb mpn_sub_n. + +dnl Copyright 1997, 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 by +dnl the Free Software Foundation; either version 3 of the License, or (at your +dnl 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') + +C INPUT PARAMETERS +define(`rp', r0) +define(`up', r1) +define(`vp', r2) +define(`n', r3) + +ASM_START() + .thumb +PROLOGUE(mpn_sub_nc) + push {r4, r5, r6} + ldr r6, [sp, #12] C init carry save register + neg r6, r6 + b L(top) +EPILOGUE() +PROLOGUE(mpn_sub_n) + push {r4, r5, r6} + mov r6, n C init carry save register + +L(top): ldmia up!, {r4} C load next limb from S1 + cmp n, r6 C tricky carry restore + ldmia vp!, {r5} C load next limb from S2 + sbc r4, r5 + stmia rp!, {r4} C store result limb to RES + sbc r6, r6 C save negated carry + sub n, #1 + bne L(top) + + neg r0, r6 + pop {r4, r5, r6} + bx lr +EPILOGUE() diff --git a/mpn/thumb/sub_n.s b/mpn/thumb/sub_n.s deleted file mode 100644 index fbd4c9819..000000000 --- a/mpn/thumb/sub_n.s +++ /dev/null @@ -1,48 +0,0 @@ -@ ARM/Thumb mpn_sub_n -- Subtract two limb vectors of the same length > 0 and -@ store difference in a third limb vector. - -@ Copyright 1997, 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 r0 -@ S1_ptr r1 -@ S2_ptr r2 -@ SIZE r3 - -@ NOT TESTED CODE - - .text - .thumb - .align 0 - .global ___gmpn_sub_n -___gmpn_sub_n: - push {r4, r5, r6, lr} - mov r6, #1 @ init carry save register - -Loop: sub r6, #1 @ restore carry (set iff r6 was 0) - ldmia r1!, {r4} @ load next limb from S1 - ldmia r2!, {r5} @ load next limb from S2 - sbc r4, r5 - stmia r0!, {r4} @ store result limb to RES - sbc r6, r6 @ save negated carry - sub r3, #1 - bge Loop @ loop back while remaining count >= 4 - - mov r0, r6 - pop {r4, r5, r6, pc} |