| 
					
				 | 
			
			
				@@ -663,30 +663,38 @@ if test x$enable_curve25519 != xno; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       [AC_LANG_PROGRAM([dnl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         #include <stdint.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         typedef unsigned uint128_t __attribute__((mode(TI))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int func(uint64_t a, uint64_t b) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  	     uint128_t c = ((uint128_t)a) * b; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             int ok = ((uint64_t)(c>>96)) == 522859 && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	           (((uint64_t)(c>>64))&0xffffffffL) == 3604448702L && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   (((uint64_t)(c>>32))&0xffffffffL) == 2351960064L && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   (((uint64_t)(c))&0xffffffffL) == 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             return ok; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	], [dnl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          uint64_t a = ((uint64_t)2000000000) * 1000000000; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	  uint64_t b = ((uint64_t)1234567890) << 24; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	  uint128_t c = ((uint128_t)a) * b; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	  return ((uint64_t)(c>>96)) == 522859 && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	         ((uint64_t)(c>>64))&0xffffffffL == 3604448702L && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 ((uint64_t)(c>>32))&0xffffffffL == 2351960064L && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 ((uint64_t)(c))&0xffffffffL == 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  int ok = func( ((uint64_t)2000000000) * 1000000000, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  	         ((uint64_t)1234567890) << 24); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          return !ok; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ])], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	[tor_cv_can_use_curve25519_donna_c64=yes], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         [tor_cv_can_use_curve25519_donna_c64=no], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	[AC_COMPILE_IFELSE( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           [AC_LANG_PROGRAM([dnl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            #include <stdint.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            typedef unsigned uint128_t __attribute__((mode(TI))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ], [dnl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              uint64_t a = ((uint64_t)2000000000) * 1000000000; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	      uint64_t b = ((uint64_t)1234567890) << 24; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	      uint128_t c = ((uint128_t)a) * b; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	      return ((uint64_t)(c>>96)) == 522859 && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	             ((uint64_t)(c>>64))&0xffffffffL == 3604448702L && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                     ((uint64_t)(c>>32))&0xffffffffL == 2351960064L && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                     ((uint64_t)(c))&0xffffffffL == 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ])], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        #include <stdint.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        typedef unsigned uint128_t __attribute__((mode(TI))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int func(uint64_t a, uint64_t b) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  	     uint128_t c = ((uint128_t)a) * b; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             int ok = ((uint64_t)(c>>96)) == 522859 && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	           (((uint64_t)(c>>64))&0xffffffffL) == 3604448702L && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   (((uint64_t)(c>>32))&0xffffffffL) == 2351960064L && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   (((uint64_t)(c))&0xffffffffL) == 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             return ok; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	], [dnl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  int ok = func( ((uint64_t)2000000000) * 1000000000, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  	         ((uint64_t)1234567890) << 24); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          return !ok; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ])], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             [tor_cv_can_use_curve25519_donna_c64=cross], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	    [tor_cv_can_use_curve25519_donna_c64=no])])]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |