The following assambly source code is original for gcc arm complier, I did some changes for TI ARM compiler, but there are still some build issues.
[E0004]
Illegal constant, does not conform to modify_constant() format
and r9,r8,#-38
[E0004]
Illegal constant, does not conform to modify_constant() format
and r12,r4,#0x7fffffff
.thumb .text .align 2 fe25519_add: .global fe25519_add ldr r0,[r8,#28] ldr r4,[r9,#28] adds r0,r0,r4 mov r11,#0 adc r11,r11,r11 lsl r11,r11,#1 add r11,r11,r0, lsr #31 movs r7,#19 mul r11,r11,r7 bic r7,r0,#0x80000000 ldm r8!,{r0-r3} ldm r9!,{r4-r6,r10} mov r12,#1 umaal r0,r11,r12,r4 umaal r1,r11,r12,r5 umaal r2,r11,r12,r6 umaal r3,r11,r12,r10 ldm r9,{r4-r6} ldm r8,{r8-r10} umaal r4,r11,r12,r8 umaal r5,r11,r12,r9 umaal r6,r11,r12,r10 add r7,r7,r11 bx lr fe25519_sub: .global fe25519_sub ldm r8,{r0-r7} ldm r9!,{r8,r10-r12} subs r0,r8 sbcs r1,r10 sbcs r2,r11 sbcs r3,r12 ldm r9,{r8-r11} sbcs r4,r8 sbcs r5,r9 sbcs r6,r10 sbcs r7,r11 sbc r8,r8 and r9,r8,#-38 adds r0,r9 adcs r1,r8 adcs r2,r8 adcs r3,r8 adcs r4,r8 adcs r5,r8 adcs r6,r8 adcs r7,r8 adcs r8,#0 and r9,r8,#-38 adds r0,r9 bx lr fe25519_mul: .global fe25519_mul push {r2,lr} sub sp,#28 ldm r2,{r2,r3,r4,r5} ldm r1!,{r0,r10,lr} umull r6,r11,r2,r0 umull r7,r12,r3,r0 umaal r7,r11,r2,r10 push {r6,r7} umull r8,r6,r4,r0 umaal r8,r11,r3,r10 umull r9,r7,r5,r0 umaal r9,r11,r4,r10 umaal r11,r7,r5,r10 umaal r8,r12,r2,lr umaal r9,r12,r3,lr umaal r11,r12,r4,lr umaal r12,r7,r5,lr ldm r1!,{r0,r10,lr} umaal r9,r6,r2,r0 umaal r11,r6,r3,r0 umaal r12,r6,r4,r0 umaal r6,r7,r5,r0 strd r8,r9,[sp,#8] mov r9,#0 umaal r11,r9,r2,r10 umaal r12,r9,r3,r10 umaal r6,r9,r4,r10 umaal r7,r9,r5,r10 mov r10,#0 umaal r12,r10,r2,lr umaal r6,r10,r3,lr umaal r7,r10,r4,lr umaal r9,r10,r5,lr ldr r8,[r1],#4 mov lr,#0 umaal lr,r6,r2,r8 umaal r7,r6,r3,r8 umaal r9,r6,r4,r8 umaal r10,r6,r5,r8 ldr r8,[r1],#-28 mov r0,#0 umaal r7,r0,r2,r8 umaal r9,r0,r3,r8 umaal r10,r0,r4,r8 umaal r6,r0,r5,r8 push {r0} ldr r2,[sp,#40] adds r2,r2,#16 ldm r2,{r2,r3,r4,r5} ldr r8,[r1],#4 mov r0,#0 umaal r11,r0,r2,r8 str r11,[sp,#16+4] umaal r12,r0,r3,r8 umaal lr,r0,r4,r8 umaal r0,r7,r5,r8 ldr r8,[r1],#4 mov r11,#0 umaal r12,r11,r2,r8 str r12,[sp,#20+4] umaal lr,r11,r3,r8 umaal r0,r11,r4,r8 umaal r11,r7,r5,r8 ldr r8,[r1],#4 mov r12,#0 umaal lr,r12,r2,r8 str lr,[sp,#24+4] umaal r0,r12,r3,r8 umaal r11,r12,r4,r8 umaal r10,r12,r5,r8 ldr r8,[r1],#4 mov lr,#0 umaal r0,lr,r2,r8 str r0,[sp,#28+4] umaal r11,lr,r3,r8 umaal r10,lr,r4,r8 umaal r6,lr,r5,r8 ldm r1!,{r0,r8} umaal r11,r9,r2,r0 str r11,[sp,#32+4] umaal r9,r10,r3,r0 umaal r10,r6,r4,r0 pop {r11} umaal r11,r6,r5,r0 umaal r9,r7,r2,r8 umaal r10,r7,r3,r8 umaal r11,r7,r4,r8 umaal r6,r7,r5,r8 ldm r1!,{r0,r8} umaal r10,r12,r2,r0 umaal r11,r12,r3,r0 umaal r6,r12,r4,r0 umaal r7,r12,r5,r0 umaal r11,lr,r2,r8 umaal r6,lr,r3,r8 umaal lr,r7,r4,r8 umaal r7,r12,r5,r8 ldrd r4,r5,[sp,#28] movs r3,#38 mov r8,#0 umaal r4,r8,r3,r12 lsl r8,r8,#1 orr r8,r8,r4, lsr #31 and r12,r4,#0x7fffffff movs r4,#19 mul r8,r8,r4 pop {r0-r2} umaal r0,r8,r3,r5 umaal r1,r8,r3,r9 umaal r2,r8,r3,r10 mov r9,#38 pop {r3,r4} umaal r3,r8,r9,r11 umaal r4,r8,r9,r6 pop {r5,r6} umaal r5,r8,r9,lr umaal r6,r8,r9,r7 add r7,r8,r12 add sp,#12 pop {pc} fe25519_sqr: .global fe25519_sqr push {lr} sub sp,#20 umull r9,r10,r0,r0 umull r11,r12,r0,r1 adds r11,r11,r11 mov lr,#0 umaal r10,r11,lr,lr push {r9,r10} mov r8,#0 umaal r8,r12,r0,r2 adcs r8,r8,r8 umaal r8,r11,r1,r1 umull r9,r10,r0,r3 umaal r9,r12,r1,r2 adcs r9,r9,r9 umaal r9,r11,lr,lr strd r8,r9,[sp,#8] mov r9,#0 umaal r9,r10,r0,r4 umaal r9,r12,r1,r3 adcs r9,r9,r9 umaal r9,r11,r2,r2 str r9,[sp,#16] umull r9,r8,r0,r5 umaal r9,r10,r1,r4 umaal r9,r12,r2,r3 adcs r9,r9,r9 umaal r9,r11,lr,lr str r9,[sp,#20] mov r9,#0 umaal r9,r8,r1,r5 umaal r9,r12,r2,r4 umaal r9,r10,r0,r6 adcs r9,r9,r9 umaal r9,r11,r3,r3 str r9,[sp,#24] umull r0,r9,r0,r7 umaal r0,r10,r1,r6 umaal r0,r12,r2,r5 umaal r0,r8,r3,r4 adcs r0,r0,r0 umaal r0,r11,lr,lr umaal r9,r8,r1,r7 umaal r9,r10,r2,r6 umaal r12,r9,r3,r5 adcs r12,r12,r12 umaal r11,r12,r4,r4 umaal r9,r8,r2,r7 umaal r10,r9,r3,r6 movs r2,#0 umaal r10,r2,r4,r5 adcs r10,r10,r10 umaal r12,r10,lr,lr umaal r2,r8,r3,r7 umaal r9,r2,r4,r6 adcs r9,r9,r9 umaal r10,r9,r5,r5 movs r3,#0 umaal r3,r8,r4,r7 umaal r3,r2,r5,r6 adcs r3,r3,r3 umaal r9,r3,lr,lr umaal r8,r2,r5,r7 adcs r8,r8,r8 umaal r3,r8,r6,r6 umull r4,r5,lr,lr umaal r4,r2,r6,r7 adcs r4,r4,r4 umaal r4,r8,lr,lr adcs r2,r2,r2 umaal r8,r2,r7,r7 adcs r2,r2,lr mov r6,#38 umaal r0,lr,r6,r2 lsl lr,lr,#1 orr lr,lr,r0, lsr #31 and r7,r0,#0x7fffffff movs r5,#19 mul lr,lr,r5 pop {r0,r1} umaal r0,lr,r6,r11 umaal r1,lr,r6,r12 mov r11,r3 mov r12,r4 pop {r2,r3,r4,r5} umaal r2,lr,r6,r10 umaal r3,lr,r6,r9 umaal r4,lr,r6,r11 umaal r5,lr,r6,r12 pop {r6} mov r12,#38 umaal r6,lr,r12,r8 add r7,r7,lr pop {pc} fe25519_sqr_many: .global fe25519_sqr_many push {r8,lr} $0: bl fe25519_sqr ldr r8,[sp,#0] subs r8,r8,#1 str r8,[sp,#0] bne $0 .newblock ; Undefine $0 so it can be used add sp,sp,#4 add r8,sp,#4 stm r8,{r0-r7} pop {pc} loadm: ldr r0,[r1,#0] ldr r2,[r1,#8] ldr r3,[r1,#12] ldr r4,[r1,#16] ldr r5,[r1,#20] ldr r6,[r1,#24] ldr r7,[r1,#28] ldr r1,[r1,#4] bx lr curve25519_scalarmult: .global curve25519_scalarmult push {r0,r4-r11,lr} mov r10,r2 bl loadm and r0,r0,#0xfffffff8 orr r7,r7,#0x40000000 push {r0-r7} movs r8,#0 push {r2,r8} mov r1,r10 bl loadm and r7,r7,#0x7fffffff push {r0-r7} movs r9,#1 umull r10,r11,r8,r8 mov r12,#0 push {r8,r10,r11,r12} push {r9,r10,r11,r12} push {r0-r7} umull r6,r7,r8,r8 push {r6,r7,r8,r10,r11,r12} push {r6,r7,r8,r10,r11,r12} push {r9,r10,r11,r12} movs r0,#254 movs r3,#0 $0: lsrs r1,r0,#5 adds r2,sp,#168 ldr r1,[r2,r1,lsl #2] and r4,r0,#0x1f lsrs r1,r1,r4 and r1,r1,#1 strd r0,r1,[sp,#160] eors r1,r1,r3 rsbs lr,r1,#0 mov r0,sp add r1,sp,#64 mov r11,#4 $1: ldm r0,{r2-r5} ldm r1,{r6-r9} eors r2,r2,r6 and r10,r2,lr eors r6,r6,r10 eors r2,r2,r6 eors r3,r3,r7 and r10,r3,lr eors r7,r7,r10 eors r3,r3,r7 eors r4,r4,r8 and r10,r4,lr eors r8,r8,r10 eors r4,r4,r8 eors r5,r5,r9 and r10,r5,lr eors r9,r9,r10 eors r5,r5,r9 stm r0!,{r2-r5} stm r1!,{r6-r9} subs r11,#1 bne $1 mov r8,sp add r9,sp,#32 bl fe25519_add push {r0-r7} bl fe25519_sqr push {r0-r7} add r8,sp,#64 add r9,sp,#96 bl fe25519_sub push {r0-r7} bl fe25519_sqr push {r0-r7} mov r1,sp add r2,sp,#64 bl fe25519_mul add r8,sp,#128 stm r8,{r0-r7} add r8,sp,#64 mov r9,sp bl fe25519_sub add r8,sp,#64 stm r8,{r0-r7} mov lr,#56130 add lr,lr,#65536 ldr r12,[sp,#28] mov r11,#0 umaal r12,r11,lr,r7 lsl r11,r11,#1 add r11,r11,r12, lsr #31 movs r7,#19 mul r11,r11,r7 bic r7,r12,#0x80000000 ldm sp!,{r8,r9,r10,r12} umaal r8,r11,lr,r0 umaal r9,r11,lr,r1 umaal r10,r11,lr,r2 umaal r12,r11,lr,r3 ldm sp!,{r0,r1,r2} umaal r0,r11,lr,r4 umaal r1,r11,lr,r5 umaal r2,r11,lr,r6 add r7,r7,r11 add sp,sp,#4 push {r0,r1,r2,r7} push {r8,r9,r10,r12} mov r1,sp add r2,sp,#64 bl fe25519_mul add r8,sp,#160 stm r8,{r0-r7} add r8,sp,#192 add r9,sp,#224 bl fe25519_add stm sp,{r0-r7} mov r1,sp add r2,sp,#32 bl fe25519_mul add r8,sp,#32 stm r8,{r0-r7} add r8,sp,#192 add r9,sp,#224 bl fe25519_sub stm sp,{r0-r7} mov r1,sp add r2,sp,#96 bl fe25519_mul stm sp,{r0-r7} mov r8,sp add r9,sp,#32 bl fe25519_add bl fe25519_sqr add r8,sp,#192 stm r8,{r0-r7} mov r8,sp add r9,sp,#32 bl fe25519_sub bl fe25519_sqr stm sp,{r0-r7} mov r1,sp add r2,sp,#256 bl fe25519_mul add r8,sp,#224 stm r8,{r0-r7} add sp,sp,#128 ldrd r2,r3,[sp,#160] subs r0,r2,#1 bpl $0 .newblock ; Undefine $0 and S1 so it can be used add r0,sp,#32 ldm r0,{r0-r7} bl fe25519_sqr push {r0-r7} bl fe25519_sqr bl fe25519_sqr push {r0-r7} add r1,sp,#96 mov r2,sp bl fe25519_mul stm sp,{r0-r7} mov r1,sp add r2,sp,#32 bl fe25519_mul add r8,sp,#32 stm r8,{r0-r7} bl fe25519_sqr push {r0-r7} mov r1,sp add r2,sp,#32 bl fe25519_mul add r8,sp,#32 stm r8,{r0-r7} mov r8,#5 bl fe25519_sqr_many mov r1,sp add r2,sp,#32 bl fe25519_mul add r8,sp,#32 stm r8,{r0-r7} movs r8,#10 bl fe25519_sqr_many mov r1,sp add r2,sp,#32 bl fe25519_mul stm sp,{r0-r7} movs r8,#20 sub sp,sp,#32 bl fe25519_sqr_many mov r1,sp add r2,sp,#32 bl fe25519_mul add sp,sp,#32 movs r8,#10 bl fe25519_sqr_many mov r1,sp add r2,sp,#32 bl fe25519_mul add r8,sp,#32 stm r8,{r0-r7} movs r8,#50 bl fe25519_sqr_many mov r1,sp add r2,sp,#32 bl fe25519_mul stm sp,{r0-r7} movs r8,#100 sub sp,sp,#32 bl fe25519_sqr_many mov r1,sp add r2,sp,#32 bl fe25519_mul add sp,sp,#32 movs r8,#50 bl fe25519_sqr_many mov r1,sp add r2,sp,#32 bl fe25519_mul movs r8,#5 bl fe25519_sqr_many mov r1,sp add r2,sp,#64 bl fe25519_mul stm sp,{r0-r7} mov r1,sp add r2,sp,#96 bl fe25519_mul lsr r8,r7,#31 mov r9,#19 mul r8,r8,r9 mov r10,#0 add r8,r8,#19 adds r8,r0,r8 adcs r8,r1,r10 adcs r8,r2,r10 adcs r8,r3,r10 adcs r8,r4,r10 adcs r8,r5,r10 adcs r8,r6,r10 adcs r8,r7,r10 adcs r11,r10,r10 lsr r8,r8,#31 orr r8,r8,r11, lsl #1 mul r8,r8,r9 ldr r9,[sp,#296] adds r0,r0,r8 str r0,[r9,#0] movs r0,#0 adcs r1,r1,r0 str r1,[r9,#4] mov r1,r9 adcs r2,r2,r0 adcs r3,r3,r0 adcs r4,r4,r0 adcs r5,r5,r0 adcs r6,r6,r0 adcs r7,r7,r0 and r7,r7,#0x7fffffff str r2,[r1,#8] str r3,[r1,#12] str r4,[r1,#16] str r5,[r1,#20] str r6,[r1,#24] str r7,[r1,#28] add sp,sp,#300 pop {r4-r11,pc}