diff options
| author | serpilliere <serpilliere@users.noreply.github.com> | 2018-05-15 11:19:41 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-05-15 11:19:41 +0200 |
| commit | 4dae0d5df51165d2c535f0812761dc6bdadfe88e (patch) | |
| tree | 392c861b580d89bb8be80856fd8403d1d7c0e2bf /miasm2/jitter/vm_mngr.c | |
| parent | 833524bb7291e82613afba2184b3c0c9801445f5 (diff) | |
| parent | de4295331794e81937a5c4073c37808ec63beaa4 (diff) | |
| download | miasm-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.c | 32 |
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; } |