401578 drd: crashes sometimes on fork()
401627 memcheck errors with glibc avx2 optimized wcsncmp
401822 none/tests/ppc64/jm-vmx fails and produces assembler warnings
+401827 none/tests/ppc64/test_isa_2_06_part3 failure on ppc64le (xvrsqrtesp)
+401828 none/tests/ppc64/test_isa_2_06_part1 failure on ppc64le (fcfids and
+ fcfidus)
402006 mark helper regs defined in final_tidyup before freeres_wrapper call
402048 WARNING: unhandled ppc64[be|le]-linux syscall: 26 (ptrace)
402123 invalid assembler opcodes for mips32r2
}
case 0x212: // xscvdpsp (VSX Scalar round Double-Precision to single-precision and
// Convert to Single-Precision format
+ // Apr 2019 update - write the result to both halves of the
+ // target VSR. (see bug 401827,401828).
DIP("xscvdpsp v%u,v%u\n", XT, XB);
+ IRTemp ResultI32a = newTemp(Ity_I32);
+ assign(ResultI32a, unop( Iop_ReinterpF32asI32,
+ unop( Iop_TruncF64asF32,
+ binop( Iop_RoundF64toF32,
+ get_IR_roundingmode(),
+ mkexpr( xB ) ) ) ) );
putVSReg( XT,
binop( Iop_64HLtoV128,
binop( Iop_32HLto64,
- unop( Iop_ReinterpF32asI32,
- unop( Iop_TruncF64asF32,
- binop( Iop_RoundF64toF32,
- get_IR_roundingmode(),
- mkexpr( xB ) ) ) ),
- mkU32( 0 ) ),
+ mkexpr(ResultI32a ),
+ mkexpr(ResultI32a ) ),
mkU64( 0ULL ) ) );
break;
case 0x216: /* xscvdpspn (VSX Scalar convert scalar Single-Precision to
vector Single-Precision non-signalling */
+ // Apr 2019 update - write the result to both halves of the
+ // target VSR. (see bug 401827,401828).
DIP("xscvdpspn v%u,v%u\n", XT, XB);
+ IRTemp ResultI32b = newTemp(Ity_I32);
+ assign(ResultI32b, unop( Iop_ReinterpF32asI32,
+ unop( Iop_TruncF64asF32,
+ mkexpr( xB ) ) ) );
putVSReg( XT,
binop( Iop_64HLtoV128,
binop( Iop_32HLto64,
- unop( Iop_ReinterpF32asI32,
- unop( Iop_TruncF64asF32,
- mkexpr( xB ) ) ),
- mkU32( 0 ) ),
+ mkexpr(ResultI32b ),
+ mkexpr(ResultI32b ) ),
mkU64( 0ULL ) ) );
break;
case 0x090: // xscvdpuxws (VSX Scalar truncate Double-Precision to integer
double resd;
unsigned long long u0;
int i;
- int res32 = strcmp(fp_tests[k].name, "fcfidu");
+ // fcfids - 64-bit fp converted to inf precise fp integer, rounded to SP. (32)
+ // fcfidus - 64-bit fp converted to inf precise fp integer, rounded to SP. (32)
+ // fcfidu - 64-bit fp converted to inf precise fp integer, rounded to DP. (64)
+ int res32 = (
+ (strcmp(fp_tests[k].name, "fcfids")==0) ||
+ (strcmp(fp_tests[k].name, "fcfidus")==0) );
for (i = 0; i < nb_fargs; i++) {
u0 = *(unsigned long long *) (&fargs[i]);
{ &test_xxleqv, "xxleqv", VSX_EQV },
{ &test_xxlorc, "xxlorc", VSX_ORC },
{ &test_xxlnand, "xxlnand", VSX_NAND },
- { NULL, NULL}
+ { NULL, NULL, 0}
};
Bool check_reciprocal_estimate(Bool is_rsqrte, int idx, int output_vec_idx)