393023 callgrind_control risks using the wrong vgdb
393062 build-id ELF phdrs read causes "debuginfo reader: ensure_valid failed"
393099 posix_memalign() invalid write if alignment == 0
+395709 PPC64 is missing support for the xvnegsp instruction
n-i-bz Fix missing workq_ops operations (macOS)
n-i-bz fix bug in strspn replacement
}
break;
}
+ case 0x372: // xvnegsp (VSX Vector Negate Single-Precision)
+ {
+ IRTemp B0 = newTemp(Ity_I32);
+ IRTemp B1 = newTemp(Ity_I32);
+ IRTemp B2 = newTemp(Ity_I32);
+ IRTemp B3 = newTemp(Ity_I32);
+
+ DIP("xvnegsp v%d,v%d\n", XT, XB);
+
+ /* Don't support NegF32, so just XOR the sign bit in the int value */
+ assign(B0, unop( Iop_64HIto32,
+ unop( Iop_V128HIto64, getVSReg( XB ) ) ) );
+ assign(B1, unop( Iop_64to32,
+ unop( Iop_V128HIto64, getVSReg( XB ) ) ) );
+ assign(B2, unop( Iop_64HIto32,
+ unop( Iop_V128to64, getVSReg( XB ) ) ) );
+ assign(B3, unop( Iop_64to32,
+ unop( Iop_V128to64, getVSReg( XB ) ) ) );
+
+ putVSReg( XT,
+ binop( Iop_64HLtoV128,
+ binop( Iop_32HLto64,
+ binop( Iop_Xor32, mkexpr( B0 ), mkU32( 0x80000000 ) ),
+ binop( Iop_Xor32, mkexpr( B1 ), mkU32( 0x80000000 ) ) ),
+ binop( Iop_32HLto64,
+ binop( Iop_Xor32, mkexpr( B2 ), mkU32( 0x80000000 ) ),
+ binop( Iop_Xor32, mkexpr( B3 ), mkU32( 0x80000000 ) ) ) ) );
+ break;
+ }
case 0x3F2: // xvnegdp (VSX Vector Negate Double-Precision)
{
IRTemp frB = newTemp(Ity_F64);
case 0x134: // xvresp
case 0x1B4: // xvredp
case 0x194: case 0x114: // xvrsqrtedp, xvrsqrtesp
+ case 0x372: // xvnegsp
case 0x380: case 0x3A0: // xvmaxdp, xvmindp
case 0x300: case 0x320: // xvmaxsp, xvminsp
case 0x3C0: case 0x340: // xvcpsgndp, xvcpsgnsp
__asm__ __volatile__ ("xvnegdp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
}
+static void test_xvnegsp(void)
+{
+ __asm__ __volatile__ ("xvnegsp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
static void test_xvabssp(void)
{
__asm__ __volatile__ ("xvabssp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
{ &test_xsrdpi, "xsrdpi", NULL, 20, DOUBLE_TEST, VX_CONV_TO_DOUBLE, "round"},
{ &test_xvabsdp, "xvabsdp", NULL, 20, DOUBLE_TEST, VX_DEFAULT, "abs"},
{ &test_xvnabsdp, "xvnabsdp", NULL, 20, DOUBLE_TEST, VX_DEFAULT, "nabs"},
+ { &test_xvnegsp, "xvnegsp", NULL, 20, SINGLE_TEST, VX_DEFAULT, "neg"},
{ &test_xvnegdp, "xvnegdp", NULL, 20, DOUBLE_TEST, VX_DEFAULT, "neg"},
{ &test_xvabssp, "xvabssp", NULL, 20, SINGLE_TEST, VX_DEFAULT, "abs"},
{ &test_xvnabssp, "xvnabssp", NULL, 20, SINGLE_TEST, VX_DEFAULT, "nabs"},
#8: xvnabsdp nabs(41382511a2000000) = c1382511a2000000; nabs(40312ef5a9300000) = c0312ef5a9300000
#9: xvnabsdp nabs(40514bf5d2300000) = c0514bf5d2300000; nabs(40976bf982440000) = c0976bf982440000
+#0: xvnegsp neg(3ec00000) = bec00000; neg(42780000) = c2780000; neg(00000000) = 80000000; neg(7f800000) = ff800000
+#1: xvnegsp neg(00000000) = 80000000; neg(00000000) = 80000000; neg(80000000) = 00000000; neg(7f800000) = ff800000
+#2: xvnegsp neg(ff800000) = 7f800000; neg(7fbfffff) = ffbfffff; neg(ffbfffff) = 7fbfffff; neg(7fc00000) = ffc00000
+#3: xvnegsp neg(ffc00000) = 7fc00000; neg(80000000) = 00000000; neg(c683287b) = 4683287b; neg(49192c2d) = c9192c2d
+#4: xvnegsp neg(49c1288d) = c9c1288d; neg(418977ad) = c18977ad; neg(428a5faf) = c28a5faf; neg(44bb5fcc) = c4bb5fcc
+
#0: xvnegdp neg(3fd8000000000000) = bfd8000000000000; neg(404f000000000000) = c04f000000000000
#1: xvnegdp neg(0018000000b77501) = 8018000000b77501; neg(7fe800000000051b) = ffe800000000051b
#2: xvnegdp neg(0123214569900000) = 8123214569900000; neg(0000000000000000) = 8000000000000000