mirror of
https://github.com/kmackay/micro-ecc.git
synced 2026-09-24 18:07:32 +00:00
Fix fast ARM mult/square asm for Xcode
This commit is contained in:
+929
-929
File diff suppressed because it is too large
Load Diff
+38
-38
@@ -40,12 +40,12 @@ else:
|
|||||||
print ""
|
print ""
|
||||||
emit("mov r10, #0")
|
emit("mov r10, #0")
|
||||||
emit("umull r11, r9, r3, r7")
|
emit("umull r11, r9, r3, r7")
|
||||||
emit("adds r12, r11")
|
emit("adds r12, r12, r11")
|
||||||
emit("adc r9, #0")
|
emit("adc r9, r9, #0")
|
||||||
emit("umull r11, r14, r4, r6")
|
emit("umull r11, r14, r4, r6")
|
||||||
emit("adds r12, r11")
|
emit("adds r12, r12, r11")
|
||||||
emit("adcs r9, r14")
|
emit("adcs r9, r9, r14")
|
||||||
emit("adc r10, #0")
|
emit("adc r10, r10, #0")
|
||||||
emit("stmia r0!, {r12}")
|
emit("stmia r0!, {r12}")
|
||||||
print ""
|
print ""
|
||||||
|
|
||||||
@@ -55,9 +55,9 @@ else:
|
|||||||
emit("mov r%s, #0", acc[2])
|
emit("mov r%s, #0", acc[2])
|
||||||
for i in xrange(0, 3):
|
for i in xrange(0, 3):
|
||||||
emit("umull r%s, r%s, r%s, r%s", acc[3], acc[4], rx[i], ry[2 - i])
|
emit("umull r%s, r%s, r%s, r%s", acc[3], acc[4], rx[i], ry[2 - i])
|
||||||
emit("adds r%s, r%s", acc[0], acc[3])
|
emit("adds r%s, r%s, r%s", acc[0], acc[0], acc[3])
|
||||||
emit("adcs r%s, r%s", acc[1], acc[4])
|
emit("adcs r%s, r%s, r%s", acc[1], acc[1], acc[4])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
emit("stmia r0!, {r%s}", acc[0])
|
emit("stmia r0!, {r%s}", acc[0])
|
||||||
print ""
|
print ""
|
||||||
acc = acc[1:] + acc[:1]
|
acc = acc[1:] + acc[:1]
|
||||||
@@ -65,16 +65,16 @@ else:
|
|||||||
emit("mov r%s, #0", acc[2])
|
emit("mov r%s, #0", acc[2])
|
||||||
for i in xrange(0, 2):
|
for i in xrange(0, 2):
|
||||||
emit("umull r%s, r%s, r%s, r%s", acc[3], acc[4], rx[i + 1], ry[2 - i])
|
emit("umull r%s, r%s, r%s, r%s", acc[3], acc[4], rx[i + 1], ry[2 - i])
|
||||||
emit("adds r%s, r%s", acc[0], acc[3])
|
emit("adds r%s, r%s, r%s", acc[0], acc[0], acc[3])
|
||||||
emit("adcs r%s, r%s", acc[1], acc[4])
|
emit("adcs r%s, r%s, r%s", acc[1], acc[1], acc[4])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
emit("stmia r0!, {r%s}", acc[0])
|
emit("stmia r0!, {r%s}", acc[0])
|
||||||
print ""
|
print ""
|
||||||
acc = acc[1:] + acc[:1]
|
acc = acc[1:] + acc[:1]
|
||||||
|
|
||||||
emit("umull r%s, r%s, r%s, r%s", acc[3], acc[4], rx[init_size-1], ry[init_size-1])
|
emit("umull r%s, r%s, r%s, r%s", acc[3], acc[4], rx[init_size-1], ry[init_size-1])
|
||||||
emit("adds r%s, r%s", acc[0], acc[3])
|
emit("adds r%s, r%s, r%s", acc[0], acc[0], acc[3])
|
||||||
emit("adc r%s, r%s", acc[1], acc[4])
|
emit("adc r%s, r%s, r%s", acc[1], acc[1], acc[4])
|
||||||
emit("stmia r0!, {r%s}", acc[0])
|
emit("stmia r0!, {r%s}", acc[0])
|
||||||
emit("stmia r0!, {r%s}", acc[1])
|
emit("stmia r0!, {r%s}", acc[1])
|
||||||
print ""
|
print ""
|
||||||
@@ -98,12 +98,12 @@ for row in xrange(full_rows):
|
|||||||
print ""
|
print ""
|
||||||
emit("mov r10, #0")
|
emit("mov r10, #0")
|
||||||
emit("umull r11, r9, r3, r7")
|
emit("umull r11, r9, r3, r7")
|
||||||
emit("adds r12, r11")
|
emit("adds r12, r12, r11")
|
||||||
emit("adc r9, #0")
|
emit("adc r9, r9, #0")
|
||||||
emit("umull r11, r14, r4, r6")
|
emit("umull r11, r14, r4, r6")
|
||||||
emit("adds r12, r11")
|
emit("adds r12, r12, r11")
|
||||||
emit("adcs r9, r14")
|
emit("adcs r9, r9, r14")
|
||||||
emit("adc r10, #0")
|
emit("adc r10, r10, #0")
|
||||||
emit("stmia r0!, {r12}")
|
emit("stmia r0!, {r12}")
|
||||||
print ""
|
print ""
|
||||||
|
|
||||||
@@ -111,9 +111,9 @@ for row in xrange(full_rows):
|
|||||||
emit("mov r%s, #0", acc[2])
|
emit("mov r%s, #0", acc[2])
|
||||||
for i in xrange(0, 3):
|
for i in xrange(0, 3):
|
||||||
emit("umull r%s, r%s, r%s, r%s", acc[3], acc[4], rx[i], ry[2 - i])
|
emit("umull r%s, r%s, r%s, r%s", acc[3], acc[4], rx[i], ry[2 - i])
|
||||||
emit("adds r%s, r%s", acc[0], acc[3])
|
emit("adds r%s, r%s, r%s", acc[0], acc[0], acc[3])
|
||||||
emit("adcs r%s, r%s", acc[1], acc[4])
|
emit("adcs r%s, r%s, r%s", acc[1], acc[1], acc[4])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
emit("stmia r0!, {r%s}", acc[0])
|
emit("stmia r0!, {r%s}", acc[0])
|
||||||
print ""
|
print ""
|
||||||
acc = acc[1:] + acc[:1]
|
acc = acc[1:] + acc[:1]
|
||||||
@@ -126,13 +126,13 @@ for row in xrange(full_rows):
|
|||||||
emit("mov r%s, #0", acc[2])
|
emit("mov r%s, #0", acc[2])
|
||||||
for i in xrange(0, 3):
|
for i in xrange(0, 3):
|
||||||
emit("umull r%s, r%s, r%s, r%s", acc[3], acc[4], x_regs[i], ry[2 - i])
|
emit("umull r%s, r%s, r%s, r%s", acc[3], acc[4], x_regs[i], ry[2 - i])
|
||||||
emit("adds r%s, r%s", acc[0], acc[3])
|
emit("adds r%s, r%s, r%s", acc[0], acc[0], acc[3])
|
||||||
emit("adcs r%s, r%s", acc[1], acc[4])
|
emit("adcs r%s, r%s, r%s", acc[1], acc[1], acc[4])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
emit("ldr r%s, [r0]", acc[3]) # load stored value from initial block, and add to accumulator
|
emit("ldr r%s, [r0]", acc[3]) # load stored value from initial block, and add to accumulator
|
||||||
emit("adds r%s, r%s", acc[0], acc[3])
|
emit("adds r%s, r%s, r%s", acc[0], acc[0], acc[3])
|
||||||
emit("adcs r%s, #0", acc[1])
|
emit("adcs r%s, r%s, #0", acc[1], acc[1])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
emit("stmia r0!, {r%s}", acc[0])
|
emit("stmia r0!, {r%s}", acc[0])
|
||||||
print ""
|
print ""
|
||||||
acc = acc[1:] + acc[:1]
|
acc = acc[1:] + acc[:1]
|
||||||
@@ -145,13 +145,13 @@ for row in xrange(full_rows):
|
|||||||
emit("mov r%s, #0", acc[2])
|
emit("mov r%s, #0", acc[2])
|
||||||
for i in xrange(0, 3):
|
for i in xrange(0, 3):
|
||||||
emit("umull r%s, r%s, r%s, r%s", acc[3], acc[4], x_regs[i], y_regs[2 - i])
|
emit("umull r%s, r%s, r%s, r%s", acc[3], acc[4], x_regs[i], y_regs[2 - i])
|
||||||
emit("adds r%s, r%s", acc[0], acc[3])
|
emit("adds r%s, r%s, r%s", acc[0], acc[0], acc[3])
|
||||||
emit("adcs r%s, r%s", acc[1], acc[4])
|
emit("adcs r%s, r%s, r%s", acc[1], acc[1], acc[4])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
emit("ldr r%s, [r0]", acc[3]) # load stored value from initial block, and add to accumulator
|
emit("ldr r%s, [r0]", acc[3]) # load stored value from initial block, and add to accumulator
|
||||||
emit("adds r%s, r%s", acc[0], acc[3])
|
emit("adds r%s, r%s, r%s", acc[0], acc[0], acc[3])
|
||||||
emit("adcs r%s, #0", acc[1])
|
emit("adcs r%s, r%s, #0", acc[1], acc[1])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
emit("stmia r0!, {r%s}", acc[0])
|
emit("stmia r0!, {r%s}", acc[0])
|
||||||
print ""
|
print ""
|
||||||
acc = acc[1:] + acc[:1]
|
acc = acc[1:] + acc[:1]
|
||||||
@@ -160,16 +160,16 @@ for row in xrange(full_rows):
|
|||||||
emit("mov r%s, #0", acc[2])
|
emit("mov r%s, #0", acc[2])
|
||||||
for i in xrange(0, 2):
|
for i in xrange(0, 2):
|
||||||
emit("umull r%s, r%s, r%s, r%s", acc[3], acc[4], x_regs[i + 1], y_regs[2 - i])
|
emit("umull r%s, r%s, r%s, r%s", acc[3], acc[4], x_regs[i + 1], y_regs[2 - i])
|
||||||
emit("adds r%s, r%s", acc[0], acc[3])
|
emit("adds r%s, r%s, r%s", acc[0], acc[0], acc[3])
|
||||||
emit("adcs r%s, r%s", acc[1], acc[4])
|
emit("adcs r%s, r%s, r%s", acc[1], acc[1], acc[4])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
emit("stmia r0!, {r%s}", acc[0])
|
emit("stmia r0!, {r%s}", acc[0])
|
||||||
print ""
|
print ""
|
||||||
acc = acc[1:] + acc[:1]
|
acc = acc[1:] + acc[:1]
|
||||||
|
|
||||||
emit("umull r%s, r%s, r%s, r%s", acc[3], acc[4], x_regs[2], y_regs[2])
|
emit("umull r%s, r%s, r%s, r%s", acc[3], acc[4], x_regs[2], y_regs[2])
|
||||||
emit("adds r%s, r%s", acc[0], acc[3])
|
emit("adds r%s, r%s, r%s", acc[0], acc[0], acc[3])
|
||||||
emit("adc r%s, r%s", acc[1], acc[4])
|
emit("adc r%s, r%s, r%s", acc[1], acc[1], acc[4])
|
||||||
emit("stmia r0!, {r%s}", acc[0])
|
emit("stmia r0!, {r%s}", acc[0])
|
||||||
emit("stmia r0!, {r%s}", acc[1])
|
emit("stmia r0!, {r%s}", acc[1])
|
||||||
print ""
|
print ""
|
||||||
|
|||||||
+59
-59
@@ -23,15 +23,15 @@ def emit(line, *args):
|
|||||||
def mulacc(acc, r1, r2):
|
def mulacc(acc, r1, r2):
|
||||||
if size <= 6:
|
if size <= 6:
|
||||||
emit("umull r1, r14, r%s, r%s", r1, r2)
|
emit("umull r1, r14, r%s, r%s", r1, r2)
|
||||||
emit("adds r%s, r1", acc[0])
|
emit("adds r%s, r%s, r1", acc[0], acc[0])
|
||||||
emit("adcs r%s, r14", acc[1])
|
emit("adcs r%s, r%s, r14", acc[1], acc[1])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
else:
|
else:
|
||||||
emit("mov r14, r%s", acc[1])
|
emit("mov r14, r%s", acc[1])
|
||||||
emit("umlal r%s, r%s, r%s, r%s", acc[0], acc[1], r1, r2)
|
emit("umlal r%s, r%s, r%s, r%s", acc[0], acc[1], r1, r2)
|
||||||
emit("cmp r14, r%s", acc[1])
|
emit("cmp r14, r%s", acc[1])
|
||||||
emit("it hi")
|
emit("it hi")
|
||||||
emit("adchi r%s, #0", acc[2])
|
emit("adchi r%s, r%s, #0", acc[2], acc[2])
|
||||||
|
|
||||||
r = [2, 3, 4, 5, 6, 7]
|
r = [2, 3, 4, 5, 6, 7]
|
||||||
|
|
||||||
@@ -62,13 +62,13 @@ elif init_size == 2:
|
|||||||
print ""
|
print ""
|
||||||
|
|
||||||
emit("umull r12, r10, r2, r6")
|
emit("umull r12, r10, r2, r6")
|
||||||
emit("adds r9, r12")
|
emit("adds r9, r9, r12")
|
||||||
emit("adc r10, #0")
|
emit("adc r10, r10, #0")
|
||||||
emit("stmia r0!, {r9}")
|
emit("stmia r0!, {r9}")
|
||||||
print ""
|
print ""
|
||||||
|
|
||||||
emit("umull r8, r9, r3, r6")
|
emit("umull r8, r9, r3, r6")
|
||||||
emit("adds r10, r8")
|
emit("adds r10, r10, r8")
|
||||||
emit("adc r11, r9, #0")
|
emit("adc r11, r9, #0")
|
||||||
emit("stmia r0!, {r10, r11}")
|
emit("stmia r0!, {r10, r11}")
|
||||||
print ""
|
print ""
|
||||||
@@ -85,26 +85,26 @@ emit("stmia r0!, {r11}")
|
|||||||
print ""
|
print ""
|
||||||
emit("mov r9, #0")
|
emit("mov r9, #0")
|
||||||
emit("umull r10, r11, r2, r3")
|
emit("umull r10, r11, r2, r3")
|
||||||
emit("adds r12, r10")
|
emit("adds r12, r12, r10")
|
||||||
emit("adcs r8, r11, #0")
|
emit("adcs r8, r11, #0")
|
||||||
emit("adc r9, #0")
|
emit("adc r9, r9, #0")
|
||||||
emit("adds r12, r10")
|
emit("adds r12, r12, r10")
|
||||||
emit("adcs r8, r11")
|
emit("adcs r8, r8, r11")
|
||||||
emit("adc r9, #0")
|
emit("adc r9, r9, #0")
|
||||||
emit("stmia r0!, {r12}")
|
emit("stmia r0!, {r12}")
|
||||||
print ""
|
print ""
|
||||||
emit("mov r10, #0")
|
emit("mov r10, #0")
|
||||||
emit("umull r11, r12, r2, r4")
|
emit("umull r11, r12, r2, r4")
|
||||||
emit("adds r11, r11")
|
emit("adds r11, r11, r11")
|
||||||
emit("adcs r12, r12")
|
emit("adcs r12, r12, r12")
|
||||||
emit("adc r10, #0")
|
emit("adc r10, r10, #0")
|
||||||
emit("adds r8, r11")
|
emit("adds r8, r8, r11")
|
||||||
emit("adcs r9, r12")
|
emit("adcs r9, r9, r12")
|
||||||
emit("adc r10, #0")
|
emit("adc r10, r10, #0")
|
||||||
emit("umull r11, r12, r3, r3")
|
emit("umull r11, r12, r3, r3")
|
||||||
emit("adds r8, r11")
|
emit("adds r8, r8, r11")
|
||||||
emit("adcs r9, r12")
|
emit("adcs r9, r9, r12")
|
||||||
emit("adc r10, #0")
|
emit("adc r10, r10, #0")
|
||||||
emit("stmia r0!, {r8}")
|
emit("stmia r0!, {r8}")
|
||||||
print ""
|
print ""
|
||||||
|
|
||||||
@@ -121,18 +121,18 @@ for i in xrange(3, s):
|
|||||||
for j in xrange(1, (i+1)//2):
|
for j in xrange(1, (i+1)//2):
|
||||||
mulacc(acc, r[j], r[i-j])
|
mulacc(acc, r[j], r[i-j])
|
||||||
# multiply by 2
|
# multiply by 2
|
||||||
emit("adds r%s, r%s", acc[0], acc[0])
|
emit("adds r%s, r%s, r%s", acc[0], acc[0], acc[0])
|
||||||
emit("adcs r%s, r%s", acc[1], acc[1])
|
emit("adcs r%s, r%s, r%s", acc[1], acc[1], acc[1])
|
||||||
emit("adc r%s, r%s", acc[2], acc[2])
|
emit("adc r%s, r%s, r%s", acc[2], acc[2], acc[2])
|
||||||
|
|
||||||
# add equal word (if any)
|
# add equal word (if any)
|
||||||
if ((i+1) % 2) != 0:
|
if ((i+1) % 2) != 0:
|
||||||
mulacc(acc, r[i//2], r[i//2])
|
mulacc(acc, r[i//2], r[i//2])
|
||||||
|
|
||||||
# add old accumulator
|
# add old accumulator
|
||||||
emit("adds r%s, r%s", acc[0], old_acc[0])
|
emit("adds r%s, r%s, r%s", acc[0], acc[0], old_acc[0])
|
||||||
emit("adcs r%s, r%s", acc[1], old_acc[1])
|
emit("adcs r%s, r%s, r%s", acc[1], acc[1], old_acc[1])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
|
|
||||||
# store
|
# store
|
||||||
emit("stmia r0!, {r%s}", acc[0])
|
emit("stmia r0!, {r%s}", acc[0])
|
||||||
@@ -155,23 +155,23 @@ for i in xrange(init_size):
|
|||||||
mulacc(acc, regs[j], regs[limit-j])
|
mulacc(acc, regs[j], regs[limit-j])
|
||||||
|
|
||||||
emit("ldr r14, [r0]") # load stored value from initial block, and add to accumulator
|
emit("ldr r14, [r0]") # load stored value from initial block, and add to accumulator
|
||||||
emit("adds r%s, r14", acc[0])
|
emit("adds r%s, r%s, r14", acc[0], acc[0])
|
||||||
emit("adcs r%s, #0", acc[1])
|
emit("adcs r%s, r%s, #0", acc[1], acc[1])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
|
|
||||||
# multiply by 2
|
# multiply by 2
|
||||||
emit("adds r%s, r%s", acc[0], acc[0])
|
emit("adds r%s, r%s, r%s", acc[0], acc[0], acc[0])
|
||||||
emit("adcs r%s, r%s", acc[1], acc[1])
|
emit("adcs r%s, r%s, r%s", acc[1], acc[1], acc[1])
|
||||||
emit("adc r%s, r%s", acc[2], acc[2])
|
emit("adc r%s, r%s, r%s", acc[2], acc[2], acc[2])
|
||||||
|
|
||||||
# add equal word
|
# add equal word
|
||||||
if limit == 4:
|
if limit == 4:
|
||||||
mulacc(acc, regs[2], regs[2])
|
mulacc(acc, regs[2], regs[2])
|
||||||
|
|
||||||
# add old accumulator
|
# add old accumulator
|
||||||
emit("adds r%s, r%s", acc[0], old_acc[0])
|
emit("adds r%s, r%s, r%s", acc[0], acc[0], old_acc[0])
|
||||||
emit("adcs r%s, r%s", acc[1], old_acc[1])
|
emit("adcs r%s, r%s, r%s", acc[1], acc[1], old_acc[1])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
|
|
||||||
# store
|
# store
|
||||||
emit("stmia r0!, {r%s}", acc[0])
|
emit("stmia r0!, {r%s}", acc[0])
|
||||||
@@ -189,18 +189,18 @@ for i in xrange(1, s-3):
|
|||||||
mulacc(acc, regs[i+j], regs[s - 1 - j])
|
mulacc(acc, regs[i+j], regs[s - 1 - j])
|
||||||
|
|
||||||
# multiply by 2
|
# multiply by 2
|
||||||
emit("adds r%s, r%s", acc[0], acc[0])
|
emit("adds r%s, r%s, r%s", acc[0], acc[0], acc[0])
|
||||||
emit("adcs r%s, r%s", acc[1], acc[1])
|
emit("adcs r%s, r%s, r%s", acc[1], acc[1], acc[1])
|
||||||
emit("adc r%s, r%s", acc[2], acc[2])
|
emit("adc r%s, r%s, r%s", acc[2], acc[2], acc[2])
|
||||||
|
|
||||||
# add equal word (if any)
|
# add equal word (if any)
|
||||||
if ((s-i) % 2) != 0:
|
if ((s-i) % 2) != 0:
|
||||||
mulacc(acc, regs[i + (s-i)//2], regs[i + (s-i)//2])
|
mulacc(acc, regs[i + (s-i)//2], regs[i + (s-i)//2])
|
||||||
|
|
||||||
# add old accumulator
|
# add old accumulator
|
||||||
emit("adds r%s, r%s", acc[0], old_acc[0])
|
emit("adds r%s, r%s, r%s", acc[0], acc[0], old_acc[0])
|
||||||
emit("adcs r%s, r%s", acc[1], old_acc[1])
|
emit("adcs r%s, r%s, r%s", acc[1], acc[1], old_acc[1])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
|
|
||||||
# store
|
# store
|
||||||
emit("stmia r0!, {r%s}", acc[0])
|
emit("stmia r0!, {r%s}", acc[0])
|
||||||
@@ -209,34 +209,34 @@ for i in xrange(1, s-3):
|
|||||||
acc = acc[1:] + acc[:1]
|
acc = acc[1:] + acc[:1]
|
||||||
emit("mov r%s, #0", acc[2])
|
emit("mov r%s, #0", acc[2])
|
||||||
emit("umull r1, r%s, r%s, r%s", old_acc[1], regs[s - 3], regs[s - 1])
|
emit("umull r1, r%s, r%s, r%s", old_acc[1], regs[s - 3], regs[s - 1])
|
||||||
emit("adds r1, r1")
|
emit("adds r1, r1, r1")
|
||||||
emit("adcs r%s, r%s", old_acc[1], old_acc[1])
|
emit("adcs r%s, r%s, r%s", old_acc[1], old_acc[1], old_acc[1])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
emit("adds r%s, r1", acc[0])
|
emit("adds r%s, r%s, r1", acc[0], acc[0])
|
||||||
emit("adcs r%s, r%s", acc[1], old_acc[1])
|
emit("adcs r%s, r%s, r%s", acc[1], acc[1], old_acc[1])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
emit("umull r1, r%s, r%s, r%s", old_acc[1], regs[s - 2], regs[s - 2])
|
emit("umull r1, r%s, r%s, r%s", old_acc[1], regs[s - 2], regs[s - 2])
|
||||||
emit("adds r%s, r1", acc[0])
|
emit("adds r%s, r%s, r1", acc[0], acc[0])
|
||||||
emit("adcs r%s, r%s", acc[1], old_acc[1])
|
emit("adcs r%s, r%s, r%s", acc[1], acc[1], old_acc[1])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
emit("stmia r0!, {r%s}", acc[0])
|
emit("stmia r0!, {r%s}", acc[0])
|
||||||
print ""
|
print ""
|
||||||
|
|
||||||
acc = acc[1:] + acc[:1]
|
acc = acc[1:] + acc[:1]
|
||||||
emit("mov r%s, #0", acc[2])
|
emit("mov r%s, #0", acc[2])
|
||||||
emit("umull r1, r%s, r%s, r%s", old_acc[1], regs[s - 2], regs[s - 1])
|
emit("umull r1, r%s, r%s, r%s", old_acc[1], regs[s - 2], regs[s - 1])
|
||||||
emit("adds r1, r1")
|
emit("adds r1, r1, r1")
|
||||||
emit("adcs r%s, r%s", old_acc[1], old_acc[1])
|
emit("adcs r%s, r%s, r%s", old_acc[1], old_acc[1], old_acc[1])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
emit("adds r%s, r1", acc[0])
|
emit("adds r%s, r%s, r1", acc[0], acc[0])
|
||||||
emit("adcs r%s, r%s", acc[1], old_acc[1])
|
emit("adcs r%s, r%s, r%s", acc[1], acc[1], old_acc[1])
|
||||||
emit("adc r%s, #0", acc[2])
|
emit("adc r%s, r%s, #0", acc[2], acc[2])
|
||||||
emit("stmia r0!, {r%s}", acc[0])
|
emit("stmia r0!, {r%s}", acc[0])
|
||||||
print ""
|
print ""
|
||||||
|
|
||||||
acc = acc[1:] + acc[:1]
|
acc = acc[1:] + acc[:1]
|
||||||
emit("umull r1, r%s, r%s, r%s", old_acc[1], regs[s - 1], regs[s - 1])
|
emit("umull r1, r%s, r%s, r%s", old_acc[1], regs[s - 1], regs[s - 1])
|
||||||
emit("adds r%s, r1", acc[0])
|
emit("adds r%s, r%s, r1", acc[0], acc[0])
|
||||||
emit("adcs r%s, r%s", acc[1], old_acc[1])
|
emit("adcs r%s, r%s, r%s", acc[1], acc[1], old_acc[1])
|
||||||
emit("stmia r0!, {r%s}", acc[0])
|
emit("stmia r0!, {r%s}", acc[0])
|
||||||
emit("stmia r0!, {r%s}", acc[1])
|
emit("stmia r0!, {r%s}", acc[1])
|
||||||
|
|||||||
@@ -386,11 +386,13 @@ uECC_VLI_API void uECC_vli_square(uECC_word_t *result,
|
|||||||
|
|
||||||
#else /* uECC_SQUARE_FUNC */
|
#else /* uECC_SQUARE_FUNC */
|
||||||
|
|
||||||
|
#if uECC_ENABLE_VLI_API
|
||||||
uECC_VLI_API void uECC_vli_square(uECC_word_t *result,
|
uECC_VLI_API void uECC_vli_square(uECC_word_t *result,
|
||||||
const uECC_word_t *left,
|
const uECC_word_t *left,
|
||||||
wordcount_t num_words) {
|
wordcount_t num_words) {
|
||||||
uECC_vli_mult(result, left, left, num_words);
|
uECC_vli_mult(result, left, left, num_words);
|
||||||
}
|
}
|
||||||
|
#endif /* uECC_ENABLE_VLI_API */
|
||||||
|
|
||||||
#endif /* uECC_SQUARE_FUNC */
|
#endif /* uECC_SQUARE_FUNC */
|
||||||
|
|
||||||
@@ -493,6 +495,7 @@ uECC_VLI_API void uECC_vli_modMult_fast(uECC_word_t *result,
|
|||||||
|
|
||||||
#if uECC_SQUARE_FUNC
|
#if uECC_SQUARE_FUNC
|
||||||
|
|
||||||
|
#if uECC_ENABLE_VLI_API
|
||||||
/* Computes result = left^2 % mod. */
|
/* Computes result = left^2 % mod. */
|
||||||
uECC_VLI_API void uECC_vli_modSquare(uECC_word_t *result,
|
uECC_VLI_API void uECC_vli_modSquare(uECC_word_t *result,
|
||||||
const uECC_word_t *left,
|
const uECC_word_t *left,
|
||||||
@@ -502,6 +505,7 @@ uECC_VLI_API void uECC_vli_modSquare(uECC_word_t *result,
|
|||||||
uECC_vli_square(product, left, num_words);
|
uECC_vli_square(product, left, num_words);
|
||||||
uECC_vli_mmod(result, product, mod, num_words);
|
uECC_vli_mmod(result, product, mod, num_words);
|
||||||
}
|
}
|
||||||
|
#endif /* uECC_ENABLE_VLI_API */
|
||||||
|
|
||||||
uECC_VLI_API void uECC_vli_modSquare_fast(uECC_word_t *result,
|
uECC_VLI_API void uECC_vli_modSquare_fast(uECC_word_t *result,
|
||||||
const uECC_word_t *left,
|
const uECC_word_t *left,
|
||||||
@@ -517,12 +521,14 @@ uECC_VLI_API void uECC_vli_modSquare_fast(uECC_word_t *result,
|
|||||||
|
|
||||||
#else /* uECC_SQUARE_FUNC */
|
#else /* uECC_SQUARE_FUNC */
|
||||||
|
|
||||||
|
#if uECC_ENABLE_VLI_API
|
||||||
uECC_VLI_API void uECC_vli_modSquare(uECC_word_t *result,
|
uECC_VLI_API void uECC_vli_modSquare(uECC_word_t *result,
|
||||||
const uECC_word_t *left,
|
const uECC_word_t *left,
|
||||||
const uECC_word_t *mod,
|
const uECC_word_t *mod,
|
||||||
wordcount_t num_words) {
|
wordcount_t num_words) {
|
||||||
uECC_vli_modMult(result, left, left, mod, num_words);
|
uECC_vli_modMult(result, left, left, mod, num_words);
|
||||||
}
|
}
|
||||||
|
#endif /* uECC_ENABLE_VLI_API */
|
||||||
|
|
||||||
uECC_VLI_API void uECC_vli_modSquare_fast(uECC_word_t *result,
|
uECC_VLI_API void uECC_vli_modSquare_fast(uECC_word_t *result,
|
||||||
const uECC_word_t *left,
|
const uECC_word_t *left,
|
||||||
|
|||||||
Reference in New Issue
Block a user