summaryrefslogtreecommitdiff
path: root/mpn/thumb
diff options
context:
space:
mode:
authorTorbjorn Granlund <tege@gmplib.org>2012-04-28 20:07:15 +0200
committerTorbjorn Granlund <tege@gmplib.org>2012-04-28 20:07:15 +0200
commitddbdd9e385e956dc22ab1cecebee61061f1fd3e4 (patch)
treebdf0ddb99d340bc402764079364b0b057f736194 /mpn/thumb
parentd981c256d5b964a0cd1416134a70cfa575adebb1 (diff)
downloadgmp-ddbdd9e385e956dc22ab1cecebee61061f1fd3e4.tar.gz
Replace broken thumb code.
Diffstat (limited to 'mpn/thumb')
-rw-r--r--mpn/thumb/add_n.asm52
-rw-r--r--mpn/thumb/add_n.s48
-rw-r--r--mpn/thumb/sub_n.asm52
-rw-r--r--mpn/thumb/sub_n.s48
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}