[Xtensa Patch] Improve peformance when assembling Exception Table Entries

Sterling Augustine sterling@tensilica.com
Wed Aug 19 18:00:00 GMT 2009


When the Xtensa port of gas encounters an expression that takes the 
difference of two symbols, it walks the frags between those two symbols.

C++ exception tables as produced by GCC have a lot of these expressions, 
and they are of the form a - b, a - c, a - d. This results in n-squared 
performance in the length of the C++ function, which in turn prevents 
certain G++ torture tests from completing in a reasonable amount of time.

This patch caches the second frag, allowing the traversal to continue 
from where it left off, resulting in linear performance and allowing the 
GCC torture tests to complete in reasonable time.

Sterling

2009-08-19  Sterling Augustine  <sterling@tensilica.com>
	* config/tc-xtensa.h (xtensa_frag_data): Rename unused field
         fr_prev to no_transform_end.
	* config/tc-xtensa.c (xtensa_mark_difference_of_two_symbols):
         Set and use no_transform_end.


-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: diff_symbol_patch
URL: <https://sourceware.org/pipermail/binutils/attachments/20090819/3a101601/attachment.ksh>


More information about the Binutils mailing list