The value of a bignum expression is held in a single global array. This means
authorNick Clifton <nickc@redhat.com>
Wed, 12 Mar 2014 15:44:09 +0000 (15:44 +0000)
committerNick Clifton <nickc@redhat.com>
Wed, 12 Mar 2014 15:50:49 +0000 (15:50 +0000)
commit55d9b4c146716a683d9fea769e5f4106eadb30fc
tree31d561ee0aa081ccd638955342aece052073d99f
parent646f4417760ab12c0d955dabf821d8737d94335a
The value of a bignum expression is held in a single global array.  This means
that if multiple bignum values are encountered only the most recent is valid.
If such expressions are cached, eg to be emitted into a literal pool later on
in the assembly, then only one expression - the last - will be correct.  This
patch fixes the problem for the AArch64 target by caching each bignum value
locally.

PR gas/16688
* config/tc-aarch64.c (literal_expression): New structure.
(literal_pool): Replace exp array with literal_expression array.
(add_to_lit_pool): When adding a bignum cache the big value.
(s_ltorg): When emitting a bignum initialise the global bignum
array from the cached value.

* gas/aarch64/litpool.s: New test case.
* gas/aarch64/litpool.d: Expected disassembly.
gas/ChangeLog
gas/config/tc-aarch64.c
gas/testsuite/ChangeLog
gas/testsuite/gas/aarch64/litpool.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/litpool.s [new file with mode: 0644]