|  | @@ -348,6 +348,13 @@ inline void GOOGLE_UNALIGNED_STORE64(void *p, uint64 v) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +#if defined(GOOGLE_PROTOBUF_OS_NACL) \
 | 
	
		
			
				|  |  | +    || (defined(__ANDROID__) && defined(__clang__) \
 | 
	
		
			
				|  |  | +        && (__clang_major__ == 3 && __clang_minor__ == 8) \
 | 
	
		
			
				|  |  | +        && (__clang_patchlevel__ < 275480))
 | 
	
		
			
				|  |  | +# define GOOGLE_PROTOBUF_USE_PORTABLE_LOG2
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  #if defined(_MSC_VER)
 | 
	
		
			
				|  |  |  #define GOOGLE_THREAD_LOCAL __declspec(thread)
 | 
	
		
			
				|  |  |  #else
 | 
	
	
		
			
				|  | @@ -413,12 +420,13 @@ class Bits {
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    static uint32 Log2FloorNonZero64(uint64 n) {
 | 
	
		
			
				|  |  | -    // arm-nacl-clang runs into an instruction-selection failure when it
 | 
	
		
			
				|  |  | -    // encounters __builtin_clzll:
 | 
	
		
			
				|  |  | +    // Older versions of clang run into an instruction-selection failure when
 | 
	
		
			
				|  |  | +    // it encounters __builtin_clzll:
 | 
	
		
			
				|  |  |      // https://bugs.chromium.org/p/nativeclient/issues/detail?id=4395
 | 
	
		
			
				|  |  | -    // To work around this, when we build for NaCl we use the portable
 | 
	
		
			
				|  |  | +    // This includes arm-nacl-clang and clang in older Android NDK versions.
 | 
	
		
			
				|  |  | +    // To work around this, when we build with those we use the portable
 | 
	
		
			
				|  |  |      // implementation instead.
 | 
	
		
			
				|  |  | -#if defined(__GNUC__) && !defined(GOOGLE_PROTOBUF_OS_NACL)
 | 
	
		
			
				|  |  | +#if defined(__GNUC__) && !defined(GOOGLE_PROTOBUF_USE_PORTABLE_LOG2)
 | 
	
		
			
				|  |  |    return 63 ^ static_cast<uint32>(__builtin_clzll(n));
 | 
	
		
			
				|  |  |  #else
 | 
	
		
			
				|  |  |    return Log2FloorNonZero64_Portable(n);
 |