about summary refs log tree commit diff stats
path: root/miasm2/jitter/vm_mngr.c
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2015-02-20 14:02:20 +0100
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2015-02-20 14:02:20 +0100
commit82d3e73cd19f3638265d35f765cdab1dc13d1ddb (patch)
treed2c4a568c9fd9aea904b92e1bcbeb770e8dddbb5 /miasm2/jitter/vm_mngr.c
parent736befb2b6fab02e601eae392a9969ac91f2caa3 (diff)
downloadmiasm-82d3e73cd19f3638265d35f765cdab1dc13d1ddb.tar.gz
miasm-82d3e73cd19f3638265d35f765cdab1dc13d1ddb.zip
X86: fix bsr/bsf behaviour as issued in PR #79
Diffstat (limited to 'miasm2/jitter/vm_mngr.c')
-rw-r--r--miasm2/jitter/vm_mngr.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/miasm2/jitter/vm_mngr.c b/miasm2/jitter/vm_mngr.c
index 188f0372..057c10be 100644
--- a/miasm2/jitter/vm_mngr.c
+++ b/miasm2/jitter/vm_mngr.c
@@ -915,26 +915,29 @@ int rcr_cf_op(unsigned int size, unsigned int a, unsigned int b, unsigned int cf
 {
 	return rcl_cf_op(size, a, size+1-b, cf);
 }
-unsigned int my_bsr(unsigned int a, unsigned int b)
+
+unsigned int x86_bsr(uint64_t src, unsigned int size)
 {
 	int i;
 
-	for (i=31; i>=0; i--){
-		if (b & (1<<i))
+	for (i=size-1; i>=0; i--){
+		if (src & (1<<i))
 			return i;
 	}
-	return a;
+	fprintf(stderr, "sanity check error bsr\n");
+	exit(0);
 }
 
-unsigned int my_bsf(unsigned int a, unsigned int b)
+unsigned int x86_bsf(uint64_t src, unsigned int size)
 {
 	int i;
 
-	for (i=0; i<32; i++){
-		if (b & (1<<i))
+	for (i=0; i<size; i++){
+		if (src & (1<<i))
 			return i;
 	}
-	return a;
+	fprintf(stderr, "sanity check error bsf\n");
+	exit(0);
 }