From 112f073cffee626cdf3f7a0e0f58b6a46ea7ab4d Mon Sep 17 00:00:00 2001 From: uros Date: Tue, 19 Jun 2012 16:28:50 +0000 Subject: [PATCH] * lex.c (search_line_sse42): Use __builtin_ia32_loaddqu and __builtin_ia32_pcmpestri128 instead of asm. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@188782 138bc75d-0d04-0410-961f-82ee72b054a4 --- libcpp/ChangeLog | 5 +++++ libcpp/lex.c | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index fb4bac6..312fd8d 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,8 @@ +2011-06-19 Uros Bizjak + + * lex.c (search_line_sse42): Use __builtin_ia32_loaddqu and + __builtin_ia32_pcmpestri128 instead of asm. + 2012-06-04 Dimitrios Apostolou * line-map.c (linemap_enter_macro): Don't zero max_column_hint in diff --git a/libcpp/lex.c b/libcpp/lex.c index 98ee4e9..ab904db 100644 --- a/libcpp/lex.c +++ b/libcpp/lex.c @@ -427,6 +427,8 @@ search_line_sse42 (const uchar *s, const uchar *end) /* Check for unaligned input. */ if (si & 15) { + v16qi sv; + if (__builtin_expect (end - s < 16, 0) && __builtin_expect ((si & 0xfff) > 0xff0, 0)) { @@ -439,8 +441,9 @@ search_line_sse42 (const uchar *s, const uchar *end) /* ??? The builtin doesn't understand that the PCMPESTRI read from memory need not be aligned. */ - __asm ("%vpcmpestri $0, (%1), %2" - : "=c"(index) : "r"(s), "x"(search), "a"(4), "d"(16)); + sv = __builtin_ia32_loaddqu ((const char *) s); + index = __builtin_ia32_pcmpestri128 (search, 4, sv, 16, 0); + if (__builtin_expect (index < 16, 0)) goto found; -- 2.7.4