Assembler failure on 16-bit ARM Thumb-1 build
Mike Mohr
akihana at gmail.com
Sun Mar 20 02:54:59 CET 2011
Changing line 471 in longlong.h to the following seems to fix the
listed problem:
#if defined(__ARM_ARCH_7A__) || defined (__arm_m__)
I've run into other similar issues later in this same source file, but
I don't have time right now to figure out why. I'll try to take a
closer look in a few hours.
Thanks,
Mike
On Sat, Mar 19, 2011 at 3:35 PM, Marc Glisse <marc.glisse at inria.fr> wrote:
> On Sat, 19 Mar 2011, Mike Mohr wrote:
>
>> The configure script finishes as before, but when make is started the
>> build fails fairly quickly as follows:
>>
>> libtool: compile: arm-linux-androideabi-gcc -std=gnu99 -c
>> -DHAVE_CONFIG_H -I. -I.. -D__GMP_WITHIN_GMP -I.. -DOPERATION_dive_1
>> -O2 -mthumb -Wa,--noexecstack dive_1.s -fPIC -DPIC -o .libs/dive_1.o
>> dive_1.s: Assembler messages:
>> dive_1.s:73: Error: selected processor does not support `umull
>> r8,r5,r4,r3'
>> dive_1.s:183: Error: selected processor does not support `umull
>> fp,ip,r0,r3'
>> make[2]: *** [dive_1.lo] Error 1
>>
>> Looking through the generated assembly code, the two parts that are
>> failing are:
>>
>> #APP
>> @ 136 "dive_1.c" 1
>> umull r8,r5,r4,r3
>> @ 0 "" 2
>>
>> #APP
>> @ 115 "dive_1.c" 1
>> umull fp,ip,r0,r3
>> @ 0 "" 2
>>
>> Looking on lines 115 and 136 in mpn/dive_1.c shows:
>>
>> from mpn/dive_1.c on lines:
>> 115 - umul_ppmm (h, dummy, l, divisor);
>> 136 - umul_ppmm (h, dummy, l, divisor);
>>
>> So it appears that umul_ppmm is unsupported on thumb-1 as-is. I know
>> next to no ARM assembly, so I'm hoping that someone on this list can
>> help.
>
> umul_ppmm is a macro defined in the file longlong.h. This version of the
> code is protected by the suspicious:
> #if 1 || defined (__arm_m__) /* `M' series has widening multiply support
> */
>
> I know nothing about arm or this code, but does it help if you remove "1 ||"
> there?
>
> --
> Marc Glisse
>
More information about the gmp-bugs
mailing list