Mercurial > hg > CbC > CbC_gcc
diff gcc/config/arm/bpabi.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.S Sun Feb 07 18:28:00 2010 +0900 +++ b/gcc/config/arm/bpabi.S Fri Feb 12 23:39:51 2010 +0900 @@ -64,9 +64,57 @@ #endif /* L_aeabi_ulcmp */ +.macro test_div_by_zero signed +/* Tail-call to divide-by-zero handlers which may be overridden by the user, + so unwinding works properly. */ +#if defined(__thumb2__) + cbnz yyh, 1f + cbnz yyl, 1f + cmp xxh, #0 + do_it eq + cmpeq xxl, #0 + .ifc \signed, unsigned + beq 2f + mov xxh, #0xffffffff + mov xxl, xxh +2: + .else + do_it lt, t + movlt xxl, #0 + movlt xxh, #0x80000000 + do_it gt, t + movgt xxh, #0x7fffffff + movgt xxl, #0xffffffff + .endif + b SYM (__aeabi_ldiv0) __PLT__ +1: +#else + /* Note: Thumb-1 code calls via an ARM shim on processors which + support ARM mode. */ + cmp yyh, #0 + cmpeq yyl, #0 + bne 2f + cmp xxh, #0 + cmpeq xxl, #0 + .ifc \signed, unsigned + movne xxh, #0xffffffff + movne xxl, #0xffffffff + .else + movlt xxh, #0x80000000 + movlt xxl, #0 + movgt xxh, #0x7fffffff + movgt xxl, #0xffffffff + .endif + b SYM (__aeabi_ldiv0) __PLT__ +2: +#endif +.endm + #ifdef L_aeabi_ldivmod ARM_FUNC_START aeabi_ldivmod + test_div_by_zero signed + sub sp, sp, #8 #if defined(__thumb2__) mov ip, sp @@ -85,6 +133,8 @@ #ifdef L_aeabi_uldivmod ARM_FUNC_START aeabi_uldivmod + test_div_by_zero unsigned + sub sp, sp, #8 #if defined(__thumb2__) mov ip, sp