lex.c (search_line_fast): Correct for little endian.

2013-11-18  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	* lex.c (search_line_fast): Correct for little endian.

From-SVN: r204970
This commit is contained in:
Bill Schmidt 2013-11-18 16:21:42 +00:00 committed by William Schmidt
parent ddf05af2ff
commit aadce58599
2 changed files with 13 additions and 0 deletions

View File

@ -1,3 +1,7 @@
2013-11-18 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
* lex.c (search_line_fast): Correct for little endian.
2013-11-15 Joseph Myers <joseph@codesourcery.com> 2013-11-15 Joseph Myers <joseph@codesourcery.com>
* ucnid.tab: Add C11 and C11NOSTART data. * ucnid.tab: Add C11 and C11NOSTART data.

View File

@ -559,8 +559,13 @@ search_line_fast (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
beginning with all ones and shifting in zeros according to the beginning with all ones and shifting in zeros according to the
mis-alignment. The LVSR instruction pulls the exact shift we mis-alignment. The LVSR instruction pulls the exact shift we
want from the address. */ want from the address. */
#ifdef __BIG_ENDIAN__
mask = __builtin_vec_lvsr(0, s); mask = __builtin_vec_lvsr(0, s);
mask = __builtin_vec_perm(zero, ones, mask); mask = __builtin_vec_perm(zero, ones, mask);
#else
mask = __builtin_vec_lvsl(0, s);
mask = __builtin_vec_perm(ones, zero, mask);
#endif
data &= mask; data &= mask;
/* While altivec loads mask addresses, we still need to align S so /* While altivec loads mask addresses, we still need to align S so
@ -624,7 +629,11 @@ search_line_fast (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
/* L now contains 0xff in bytes for which we matched one of the /* L now contains 0xff in bytes for which we matched one of the
relevant characters. We can find the byte index by finding relevant characters. We can find the byte index by finding
its bit index and dividing by 8. */ its bit index and dividing by 8. */
#ifdef __BIG_ENDIAN__
l = __builtin_clzl(l) >> 3; l = __builtin_clzl(l) >> 3;
#else
l = __builtin_ctzl(l) >> 3;
#endif
return s + l; return s + l;
#undef N #undef N