__attribute__((naked)) int Bignum_TrimDigits(void)
{
  __asm__ volatile(
    "push {r4, r5, r6, lr}\n\t"
    "add r4, r0, #0\n\t"
    "add r5, r1, #0\n\t"
    "add r6, r2, #0\n\t"
    "mov r0, #128\n\t"
    "lsl r0, r0, #1\n\t"
    "ldrh r1, [r4, #12]\n\t"
    "and r0, r1\n\t"
    "cmp r0, #0\n\t"
    "beq 1f\n\t"
    "ldr r0, [r4, #84]\n\t"
    "mov r2, #14\n\t"
    "ldrsh r1, [r4, r2]\n\t"
    "mov r2, #0\n\t"
    "mov r3, #2\n\t"
    "bl Bignum_Trim\n\t"
    "1:\n\t"
    "ldr r0, [pc, #24]\n\t"
    "ldrh r1, [r4, #12]\n\t"
    "and r0, r1\n\t"
    "strh r0, [r4, #12]\n\t"
    "ldr r0, [r4, #84]\n\t"
    "mov r2, #14\n\t"
    "ldrsh r1, [r4, r2]\n\t"
    "add r2, r5, #0\n\t"
    "add r3, r6, #0\n\t"
    "bl Bignum_Normalize_0801D4F0\n\t"
    "pop {r4, r5, r6, pc}\n\t"
    ".word 0xFFFFEFFF");
}
