From: wschmidt Date: Mon, 18 Nov 2013 16:21:42 +0000 (+0000) Subject: 2013-11-18 Bill Schmidt X-Git-Tag: upstream/4.9.2~2876 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=eb9920549e9e77ad824810dd641735e78f8a27d8;p=platform%2Fupstream%2Flinaro-gcc.git 2013-11-18 Bill Schmidt * lex.c (search_line_fast): Correct for little endian. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@204970 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 5e38c4b..c3391b4 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,7 @@ +2013-11-18 Bill Schmidt + + * lex.c (search_line_fast): Correct for little endian. + 2013-11-15 Joseph Myers * ucnid.tab: Add C11 and C11NOSTART data. diff --git a/libcpp/lex.c b/libcpp/lex.c index 99c2140..80829d6 100644 --- a/libcpp/lex.c +++ b/libcpp/lex.c @@ -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 mis-alignment. The LVSR instruction pulls the exact shift we want from the address. */ +#ifdef __BIG_ENDIAN__ mask = __builtin_vec_lvsr(0, s); mask = __builtin_vec_perm(zero, ones, mask); +#else + mask = __builtin_vec_lvsl(0, s); + mask = __builtin_vec_perm(ones, zero, mask); +#endif data &= mask; /* 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 relevant characters. We can find the byte index by finding its bit index and dividing by 8. */ +#ifdef __BIG_ENDIAN__ l = __builtin_clzl(l) >> 3; +#else + l = __builtin_ctzl(l) >> 3; +#endif return s + l; #undef N