From a0d58e89ca1ea3c10b8cf3624332cda6bbc107ef Mon Sep 17 00:00:00 2001 From: powturbo Date: Sun, 31 May 2015 21:50:39 +0200 Subject: [PATCH] . --- vint.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/vint.h b/vint.h index 3048a94..dfb041e 100644 --- a/vint.h +++ b/vint.h @@ -50,6 +50,15 @@ extern unsigned long long mtab[]; #define vbgeta(__ip, __x, __act) do { unsigned _vdx=(*__ip)&0xf; __x = _pext_u64(*(unsigned long long *)__ip, mtab[_vdx]); __ip+=vtab[_vdx]; __act; } while(0) #else + #if 1 +#define vbgeta(__ip, __x, __act) do {\ + if(!((__x = *__ip) & (1<<0))) { __ip++; __x >>= 1; __act;}\ + else if(!(__x & (1<<1))) { __x = (*(unsigned short *)__ip) >> 2; __ip += 2; __act;}\ + else if(!(__x & (1<<2))) { __x = (*(unsigned short *)__ip) >> 3 | *(__ip+2) << 13; __ip += 3; __act;}\ + else if(!(__x & (1<<3))) { __x = (*(unsigned *)__ip) >> 4; __ip += 4; __act;}\ + else { __x = (*(unsigned *)__ip) >> 4 | *(__ip+4) << 28; __ip += 5; __act;}\ +} while(0) + #else #define vbgeta(__ip, __x, __act) do {\ if(!((__x = *__ip) & (1<<0))) { __ip++; __x >>= 1; __act;}\ else if(!((__x = *(unsigned short *)__ip) & (1<<1))) { __ip += 2; __x >>= 2; __act;}\ @@ -57,7 +66,7 @@ extern unsigned long long mtab[]; else if(!((__x = *(unsigned *)__ip) & (1<<3))) { __ip += 4; __x >>= 4; __act;}\ else { __ip += 5; __x = __x >> 4 | (unsigned)__ip[-1] << 28; __act;}\ } while(0) - + #endif #endif //------------------------------------------------------------------------------------------------------------------------ extern unsigned char vtab[];