Mercurial > hg > CbC > CbC_gcc
diff gcc/config/arm/bpabi-v6m.S @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children | b7f97abdc517 |
line wrap: on
line diff
--- a/gcc/config/arm/bpabi-v6m.S Sun Feb 07 18:28:00 2010 +0900 +++ b/gcc/config/arm/bpabi-v6m.S Fri Feb 12 23:39:51 2010 +0900 @@ -69,9 +69,52 @@ #endif /* L_aeabi_ulcmp */ +.macro test_div_by_zero signed + cmp yyh, #0 + bne 7f + cmp yyl, #0 + bne 7f + cmp xxh, #0 + bne 2f + cmp xxl, #0 +2: + .ifc \signed, unsigned + beq 3f + mov xxh, #0 + mvn xxh, xxh @ 0xffffffff + mov xxl, xxh +3: + .else + beq 5f + blt 6f + mov xxl, #0 + mvn xxl, xxl @ 0xffffffff + lsr xxh, xxl, #1 @ 0x7fffffff + b 5f +6: mov xxh, #0x80 + lsl xxh, xxh, #24 @ 0x80000000 + mov xxl, #0 +5: + .endif + @ tailcalls are tricky on v6-m. + push {r0, r1, r2} + ldr r0, 1f + adr r1, 1f + add r0, r1 + str r0, [sp, #8] + @ We know we are not on armv4t, so pop pc is safe. + pop {r0, r1, pc} + .align 2 +1: + .word __aeabi_ldiv0 - 1b +7: +.endm + #ifdef L_aeabi_ldivmod FUNC_START aeabi_ldivmod + test_div_by_zero signed + push {r0, r1} mov r0, sp push {r0, lr} @@ -89,6 +132,8 @@ #ifdef L_aeabi_uldivmod FUNC_START aeabi_uldivmod + test_div_by_zero unsigned + push {r0, r1} mov r0, sp push {r0, lr}