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