static void
interp_v128_i4_op_left_shift (gpointer res, gpointer v1, gpointer s1)
{
- *(v128_i4*)res = *(v128_i4*)v1 << *(gint32*)s1;
+ *(v128_i4*)res = *(v128_i4*)v1 << (*(gint32*)s1 & 31);
}
static void
interp_v128_i8_op_left_shift (gpointer res, gpointer v1, gpointer s1)
{
- *(v128_i8*)res = *(v128_i8*)v1 << *(gint32*)s1;
+ *(v128_i8*)res = *(v128_i8*)v1 << (*(gint32*)s1 & 63);
}
// op_RightShift
static void
interp_v128_i1_op_right_shift (gpointer res, gpointer v1, gpointer s1)
{
- *(v128_i1*)res = *(v128_i1*)v1 >> *(gint32*)s1;
+ *(v128_i1*)res = *(v128_i1*)v1 >> (*(gint32*)s1 & 7);
}
static void
interp_v128_i2_op_right_shift (gpointer res, gpointer v1, gpointer s1)
{
- *(v128_i2*)res = *(v128_i2*)v1 >> *(gint32*)s1;
+ *(v128_i2*)res = *(v128_i2*)v1 >> (*(gint32*)s1 & 15);
}
static void
interp_v128_i4_op_right_shift (gpointer res, gpointer v1, gpointer s1)
{
- *(v128_i4*)res = *(v128_i4*)v1 >> *(gint32*)s1;
+ *(v128_i4*)res = *(v128_i4*)v1 >> (*(gint32*)s1 & 31);
}
// op_UnsignedRightShift
static void
interp_v128_i1_op_uright_shift (gpointer res, gpointer v1, gpointer s1)
{
- *(v128_u1*)res = *(v128_u1*)v1 >> *(gint32*)s1;
+ *(v128_u1*)res = *(v128_u1*)v1 >> (*(gint32*)s1 & 7);
}
static void
interp_v128_i2_op_uright_shift (gpointer res, gpointer v1, gpointer s1)
{
- *(v128_u2*)res = *(v128_u2*)v1 >> *(gint32*)s1;
+ *(v128_u2*)res = *(v128_u2*)v1 >> (*(gint32*)s1 & 15);
}
static void
interp_v128_i4_op_uright_shift (gpointer res, gpointer v1, gpointer s1)
{
- *(v128_u4*)res = *(v128_u4*)v1 >> *(gint32*)s1;
+ *(v128_u4*)res = *(v128_u4*)v1 >> (*(gint32*)s1 & 31);
}
static void
interp_v128_i8_op_uright_shift (gpointer res, gpointer v1, gpointer s1)
{
- *(v128_u8*)res = *(v128_u8*)v1 >> *(gint32*)s1;
+ *(v128_u8*)res = *(v128_u8*)v1 >> (*(gint32*)s1 & 63);
}
// op_OnesComplement