From 55d9b4c146716a683d9fea769e5f4106eadb30fc Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Wed, 12 Mar 2014 15:44:09 +0000 Subject: 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 | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'gas/ChangeLog') diff --git a/gas/ChangeLog b/gas/ChangeLog index 7bff8d3..6851b8c 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,12 @@ +2014-03-12 Nick Clifton + + 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. + 2014-03-12 Alan Modra * Makefile.in: Regenerate. -- cgit v1.1