[arm64] Negative immediates and lack of default Neon support

Marc Glisse marc.glisse at inria.fr
Fri Oct 3 09:20:42 UTC 2014


On Thu, 2 Oct 2014, Torbjörn Granlund wrote:

> There are more problems with clang's assembler:
>
> tmp-lshift.s:67:8: error: too few operands for instruction
> .Lbx1:  ldr     x4, [x1,#-8]
>        ^
> tmp-lshift.s:74:2: error: too few operands for instruction
>        str     x18, [x16,#-8]
>        ^
> tmp-lshift.s:103:2: error: too few operands for instruction
>        str     x10, [x16,#-8]
>        ^
> tmp-lshift.s:114:2: error: too few operands for instruction
>        str     x10, [x16,#-8]
>        ^
> tmp-lshift.s:143:2: error: too few operands for instruction
>        str     x18, [x16,#-56]
>        ^
>
> The error messages are misleading, the real problem is that negative
> offsets are not handled.
>
> You Marc reported successful compilation with clang.  Did you find a
> workaround for this bug?  Perhaps we really have no choice but to give
> up on clang 3.4?  Now clang 3.5 is out.

Strange, I thought I had tested 3.4, but apparently not. I get the same 
failure as you. And if I use -no-integrated-as, it passes lshift, but the 
compiler goes into an infinite loop for divrem_2.c and fails on another .c 
file with:

/tmp/mod_1_4-96baa4.s: Assembler messages:
/tmp/mod_1_4-96baa4.s:263: Error: unknown pseudo-op: `.data_region'
/tmp/mod_1_4-96baa4.s:273: Error: unknown pseudo-op: `.end_data_region'

It also crashes in many files: div_qr_2n_pi1.c, dcpi1_div_qr.c, hgcd2.c, 
gcd.c, jacobi_2.c, dcpi1_divappr_q.c, div_qr_2u_pi1.c, hgcd2_jacobi.c...

Most of those seem related to inline asm, --disable-assembly works around 
many of them, but not an issue in get_str.

Working around all that may be possible, but it is going to be quite a bit 
of work, and I don't think it is worth the trouble for a platform that 
almost noone has access to yet.

-- 
Marc Glisse


More information about the gmp-bugs mailing list