about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--miasm2/jitter/vm_mngr.c13
-rw-r--r--miasm2/jitter/vm_mngr.h2
2 files changed, 10 insertions, 5 deletions
diff --git a/miasm2/jitter/vm_mngr.c b/miasm2/jitter/vm_mngr.c
index 23464bfb..bf1eb7df 100644
--- a/miasm2/jitter/vm_mngr.c
+++ b/miasm2/jitter/vm_mngr.c
@@ -821,11 +821,11 @@ uint64_t rot_left(uint64_t size, uint64_t a, uint64_t b)
     }
 }
 
-unsigned int rot_right(unsigned int size, unsigned int a, unsigned int b)
+uint64_t rot_right(uint64_t size, uint64_t a, uint64_t b)
 {
-    unsigned int tmp;
+    uint64_t tmp;
 
-    b = b&0x1F;
+    b = b&0x3F;
     b %= size;
     switch(size){
 	    case 8:
@@ -837,8 +837,11 @@ unsigned int rot_right(unsigned int size, unsigned int a, unsigned int b)
 	    case 32:
 		    tmp = ((a&0xFFFFFFFF) >> b) | (a << (size-b));
 		    return tmp&0xffffffff;
+	    case 64:
+		    tmp = ((a&0xFFFFFFFFFFFFFFFF) >> b) | (a << (size-b));
+		    return tmp&0xFFFFFFFFFFFFFFFF;
 	    default:
-		    fprintf(stderr, "inv size in rotleft %d\n", size);
+		    fprintf(stderr, "inv size in rotright %"PRIX64"\n", size);
 		    exit(0);
     }
 }
@@ -1699,3 +1702,5 @@ uint64_t get_exception_flag(vm_mngr_t* vm_mngr)
 {
 	return vm_mngr->exception_flags;
 }
+
+
diff --git a/miasm2/jitter/vm_mngr.h b/miasm2/jitter/vm_mngr.h
index fc346cc5..0d3bdf7c 100644
--- a/miasm2/jitter/vm_mngr.h
+++ b/miasm2/jitter/vm_mngr.h
@@ -205,7 +205,7 @@ unsigned int umul16_hi(unsigned short a, unsigned short b);
 unsigned int div_op(unsigned int size, unsigned int a, unsigned int b, unsigned int c);
 unsigned int rem_op(unsigned int size, unsigned int a, unsigned int b, unsigned int c);
 uint64_t rot_left(uint64_t size, uint64_t a, uint64_t b);
-unsigned int rot_right(unsigned int size, unsigned int a, unsigned int b);
+uint64_t rot_right(uint64_t size, uint64_t a, uint64_t b);
 int rcl_rez_op(unsigned int size, unsigned int a, unsigned int b, unsigned int cf);
 int rcl_cf_op(unsigned int size, unsigned int a, unsigned int b, unsigned int cf);