ffs1 returns the first bit set to one starting counting from the most significant bit.
pcmpXstri returns the most significant bit set to one, starting counting from the least significant bit. Signed-off-by: Aurelien Jarno <aurel...@aurel32.net> --- target-i386/ops_sse.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target-i386/ops_sse.h b/target-i386/ops_sse.h index 0136df9..0667c87 100644 --- a/target-i386/ops_sse.h +++ b/target-i386/ops_sse.h @@ -2099,7 +2099,7 @@ void glue(helper_pcmpestri, SUFFIX)(CPUX86State *env, Reg *d, Reg *s, pcmp_elen(env, R_EAX, ctrl)); if (res) { - env->regs[R_ECX] = ((ctrl & (1 << 6)) ? rffs1 : ffs1)(res) - 1; + env->regs[R_ECX] = (ctrl & (1 << 6)) ? rffs1(res) - 1 : 32 - ffs1(res); } else { env->regs[R_ECX] = 16 >> (ctrl & (1 << 0)); } @@ -2137,7 +2137,7 @@ void glue(helper_pcmpistri, SUFFIX)(CPUX86State *env, Reg *d, Reg *s, pcmp_ilen(d, ctrl)); if (res) { - env->regs[R_ECX] = ((ctrl & (1 << 6)) ? rffs1 : ffs1)(res) - 1; + env->regs[R_ECX] = (ctrl & (1 << 6)) ? rffs1(res) - 1 : 32 - ffs1(res); } else { env->regs[R_ECX] = 16 >> (ctrl & (1 << 0)); } -- 1.7.10.4