Browse Source

Mark hash success as unlikely, using __builtin_expect() intrinsic

Jeff Garzik 15 years ago
parent
commit
1083e15c47
5 changed files with 13 additions and 5 deletions
  1. 8 0
      miner.h
  2. 1 1
      sha256_4way.c
  3. 2 2
      sha256_cryptopp.c
  4. 1 1
      sha256_generic.c
  5. 1 1
      sha256_via.c

+ 8 - 0
miner.h

@@ -21,6 +21,14 @@
 #include <byteswap.h>
 #endif
 
+#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
+#undef unlikely
+#define unlikely(expr) (__builtin_expect((expr), 0))
+#else
+#undef unlikely
+#define unlikely(expr) (expr)
+#endif
+
 #if defined(__i386__)
 #define WANT_CRYPTOPP_ASM32
 #endif

+ 1 - 1
sha256_4way.c

@@ -118,7 +118,7 @@ unsigned int ScanHash_4WaySSE2(const unsigned char *pmidstate, unsigned char *pd
 
         for (j = 0; j < NPAR; j++)
         {
-            if (thash[7][j] == 0)
+            if (unlikely(thash[7][j] == 0))
             {
 		int i;
 

+ 2 - 2
sha256_cryptopp.c

@@ -110,7 +110,7 @@ bool scanhash_cryptopp(const unsigned char *midstate, unsigned char *data,
 
 		stat_ctr++;
 
-		if ((hash32[7] == 0) && fulltest(hash, target)) {
+		if (unlikely((hash32[7] == 0) && fulltest(hash, target))) {
 			*hashes_done = stat_ctr;
 			return true;
 		}
@@ -592,7 +592,7 @@ bool scanhash_asm32(const unsigned char *midstate, unsigned char *data,
 
 		stat_ctr++;
 
-		if ((hash32[7] == 0) && fulltest(hash, target)) {
+		if (unlikely((hash32[7] == 0) && fulltest(hash, target))) {
 			fulltest(hash, target);
 
 			*hashes_done = stat_ctr;

+ 1 - 1
sha256_generic.c

@@ -256,7 +256,7 @@ bool scanhash_c(const unsigned char *midstate, unsigned char *data,
 
 		stat_ctr++;
 
-		if ((hash32[7] == 0) && fulltest(hash, target)) {
+		if (unlikely((hash32[7] == 0) && fulltest(hash, target))) {
 			*hashes_done = stat_ctr;
 			return true;
 		}

+ 1 - 1
sha256_via.c

@@ -57,7 +57,7 @@ bool scanhash_via(unsigned char *data_inout,
 
 		stat_ctr++;
 
-		if ((hash32[7] == 0) && fulltest(tmp_hash, target)) {
+		if (unlikely((hash32[7] == 0) && fulltest(tmp_hash, target))) {
 			/* swap nonce'd data back into original storage area;
 			 * TODO: only swap back the nonce, rather than all data
 			 */