diff options
| -rw-r--r-- | clang/Lex/Lexer.cpp | 13 | ||||
| -rw-r--r-- | clang/Lex/Makefile | 6 |
2 files changed, 18 insertions, 1 deletions
diff --git a/clang/Lex/Lexer.cpp b/clang/Lex/Lexer.cpp index 4892a21fe01..3ae7b6a4e51 100644 --- a/clang/Lex/Lexer.cpp +++ b/clang/Lex/Lexer.cpp @@ -772,6 +772,9 @@ static bool isEndOfBlockCommentWithEscapedNewLine(const char *CurPtr, #ifdef __SSE2__ #include <emmintrin.h> +#elif __ALTIVEC__ +#include <altivec.h> +#undef bool #endif /// SkipBlockComment - We have just read the /* characters from input. Read @@ -808,7 +811,15 @@ bool Lexer::SkipBlockComment(LexerToken &Result, const char *CurPtr) { while (CurPtr+16 <= BufferEnd && _mm_movemask_epi8(_mm_cmpeq_epi8(*(__m128i*)CurPtr, Slashes)) == 0) CurPtr += 16; -#else +#elif __ALTIVEC__ + __vector unsigned char Slashes = { + '/', '/', '/', '/', '/', '/', '/', '/', + '/', '/', '/', '/', '/', '/', '/', '/' + }; + while (CurPtr+16 <= BufferEnd && + !vec_any_eq(*(vector unsigned char*)CurPtr, Slashes)) + CurPtr += 16; +#else // Scan for '/' quickly. Many block comments are very large. while (CurPtr[0] != '/' && CurPtr[1] != '/' && diff --git a/clang/Lex/Makefile b/clang/Lex/Makefile index c18b8312973..f56aed05899 100644 --- a/clang/Lex/Makefile +++ b/clang/Lex/Makefile @@ -12,10 +12,16 @@ ##===----------------------------------------------------------------------===## LEVEL = ../../.. +include $(LEVEL)/Makefile.config + LIBRARYNAME := clangLex BUILD_ARCHIVE = 1 CXXFLAGS = -fno-rtti +ifeq ($(ARCH),PowerPC) +CXXFLAGS += -maltivec +endif + CPPFLAGS += -I$(PROJ_SRC_DIR)/../include include $(LEVEL)/Makefile.common |

