[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