Following is the disassembly of ecdsa_set_pub_key from v5.13.1 compiled with the toolchain from arm: arm-none-linux-gnueabihf-gcc (GNU Toolchain for the A-profile Architecture 10.2-2020.11 (arm-10.16)) 10.2.1 20201103 Both instances of ecc_swap_digits() are using ldr instruction. crypto/ecc.h: 54 for (i = 0; i < ndigits; i++) 0xc07bf174 <+132>: cmp r3, #0 0xc07bf178 <+136>: beq 0xc07bf1ec <ecdsa_set_pub_key+252> 0xc07bf17c <+140>: add lr, r5, #1 0xc07bf180 <+144>: add r0, r4, #72 ; 0x48 0xc07bf184 <+148>: sub r5, r3, #1 0xc07bf188 <+152>: add r3, lr, r3, lsl #3 55 out[i] = be64_to_cpu(src[ndigits - 1 - i]); 0xc07bf18c <+156>: ldr r2, [r3, #-8]! //<== First load == 0xc07bf190 <+160>: rev r2, r2 0xc07bf194 <+164>: cmp r3, lr 0xc07bf198 <+168>: ldr r1, [r3, #4] //<== Second load == 0xc07bf19c <+172>: rev r1, r1 0xc07bf1a0 <+176>: str r1, [r0, #8]! 0xc07bf1a4 <+180>: str r2, [r0, #4] 54 for (i = 0; i < ndigits; i++) 0xc07bf1a8 <+184>: bne 0xc07bf18c <ecdsa_set_pub_key+156> crypto/ecdsa.c: 246 ecc_swap_digits(&digits[ndigits], ctx->pub_key.y, ndigits); 0xc07bf1ac <+188>: bic r12, r12, #7 crypto/ecc.h: 54 for (i = 0; i < ndigits; i++) 0xc07bf1b0 <+192>: ldr r0, [r4, #212] ; 0xd4 0xc07bf1b4 <+196>: add r2, r12, #8 0xc07bf1b8 <+200>: add r12, r3, r12 0xc07bf1bc <+204>: add r5, r2, r5, lsl #3 0xc07bf1c0 <+208>: sub r0, r0, #8 0xc07bf1c4 <+212>: add r3, r3, r5 55 out[i] = be64_to_cpu(src[ndigits - 1 - i]); 0xc07bf1c8 <+216>: ldr r2, [r3, #-8]! //<== First load == 0xc07bf1cc <+220>: rev r2, r2 0xc07bf1d0 <+224>: cmp r12, r3 0xc07bf1d4 <+228>: ldr r1, [r3, #4] //<== Second load == 0xc07bf1d8 <+232>: rev r1, r1 0xc07bf1dc <+236>: str r1, [r0, #8]! 0xc07bf1e0 <+240>: str r2, [r0, #4]