From d35d1c0fee58f7b141f535cb0f4800c471a6b00d Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Tue, 19 Jun 2012 18:28:50 +0200 Subject: [PATCH] lex.c (search_line_sse42): Use __builtin_ia32_loaddqu and __builtin_ia32_pcmpestri128 instead of asm. * lex.c (search_line_sse42): Use __builtin_ia32_loaddqu and __builtin_ia32_pcmpestri128 instead of asm. From-SVN: r188782 --- libcpp/ChangeLog | 5 +++++ libcpp/lex.c | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index fb4bac63f7b..312fd8d97b8 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 98ee4e92da3..ab904db58be 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;