about summary refs log tree commit diff stats
path: root/miasm2/jitter/vm_mngr.c
diff options
context:
space:
mode:
authorserpilliere <serpilliere@users.noreply.github.com>2018-05-15 11:19:41 +0200
committerGitHub <noreply@github.com>2018-05-15 11:19:41 +0200
commit4dae0d5df51165d2c535f0812761dc6bdadfe88e (patch)
tree392c861b580d89bb8be80856fd8403d1d7c0e2bf /miasm2/jitter/vm_mngr.c
parent833524bb7291e82613afba2184b3c0c9801445f5 (diff)
parentde4295331794e81937a5c4073c37808ec63beaa4 (diff)
downloadmiasm-4dae0d5df51165d2c535f0812761dc6bdadfe88e.tar.gz
miasm-4dae0d5df51165d2c535f0812761dc6bdadfe88e.zip
Merge pull request #740 from commial/refactor/bsr-bsf
Refactor/bsr bsf
Diffstat (limited to 'miasm2/jitter/vm_mngr.c')
-rw-r--r--miasm2/jitter/vm_mngr.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/miasm2/jitter/vm_mngr.c b/miasm2/jitter/vm_mngr.c
index c39a08da..4331a2ac 100644
--- a/miasm2/jitter/vm_mngr.c
+++ b/miasm2/jitter/vm_mngr.c
@@ -832,27 +832,41 @@ uint64_t rot_right(uint64_t size, uint64_t a, uint64_t b)
     }
 }
 
-unsigned int x86_bsr(uint64_t size, uint64_t src)
+/*
+ * Count leading zeros - count the number of zero starting at the most
+ * significant bit
+ *
+ * Example:
+ * - cntleadzeros(size=32, src=2): 30
+ * - cntleadzeros(size=32, src=0): 32
+ */
+unsigned int cntleadzeros(uint64_t size, uint64_t src)
 {
-	uint64_t i;
+	int64_t i;
 
-	for (i=size-1; i>=0; i--){
+	for (i=(int64_t)size-1; i>=0; i--){
 		if (src & (1ull << i))
-			return i;
+			return size - (i + 1);
 	}
-	fprintf(stderr, "sanity check error bsr\n");
-	exit(EXIT_FAILURE);
+	return size;
 }
 
-unsigned int x86_bsf(uint64_t size, uint64_t src)
+/*
+ * Count trailing zeros - count the number of zero starting at the least
+ * significant bit
+ *
+ * Example:
+ * - cnttrailzeros(size=32, src=2): 1
+ * - cnttrailzeros(size=32, src=0): 32
+ */
+unsigned int cnttrailzeros(uint64_t size, uint64_t src)
 {
 	uint64_t i;
 	for (i=0; i<size; i++){
 		if (src & (1ull << i))
 			return i;
 	}
-	fprintf(stderr, "sanity check error bsf\n");
-	exit(EXIT_FAILURE);
+	return size;
 }