Hello,
I use arm-none-eabi-gcc-linaro-6.3.2017.02p3 to write a code for
Cortex-M0 SoC, which uses only Thumb instruction.
I found that arm-none-eabi-gcc with -mcpu=cortex-m0 option links
ARM-instruction library when a compiled code has division/remainder
operation.
Here is a code for testing.
----
int main(int argc, char *argv[])
{
*((volatile int *)0x0a00) =
*((volatile int *)0x0a04) / *((volatile int *)0x0a08);
*((volatile int *)0x0b00) =
*((volatile int *)0x0b04) % *((volatile int *)0x0b08);
return 0;
}
----
Simply compile with "arm-none-eabi-gcc -mcpu=cortex-m0 test.c" and
disassmble.
----
00008378 <__aeabi_idivmod>:
8378: e3510000 cmp r1, #0, 0
837c: 0afffff7 beq 8360 <.divsi3_skip_div0_test+0x110>
8380: e92d4003 push {r0, r1, lr}
8384: ebffffb1 bl 8250 <.divsi3_skip_div0_test>
8388: e8bd4006 pop {r1, r2, lr}
838c: e0030092 mul r3, r2, r0
8390: e0411003 sub r1, r1, r3
8394: e12fff1e bx lr
00008398 <__aeabi_idiv0>:
8398: 4770 bx lr
839a: 46c0 nop ; (mov r8, r8)
0000839c <atexit>:
839c: b510 push {r4, lr}
839e: 0001 movs r1, r0
83a0: 2300 movs r3, #0
83a2: 2200 movs r2, #0
83a4: 2000 movs r0, #0
83a6: f000 fbdb bl 8b60 <__register_exitproc>
83aa: bc10 pop {r4}
83ac: bc02 pop {r1}
83ae: 4708 bx r1
----
I found that _mainCRTStartup, __aeabi_idiv, .divsi3_skip_div0_test and
__aeabi_idivmod is ARM, others are Thumb.
I want to use division/remainder function (no startup required),
is there any remedy?
Regards,
--
SASANO Takayoshi (JG1UAA) <[email protected]>