Add Iop_Exp2_32Fx4 to VEX/pub/libvex_ir.h to support the 2^x instruction.
Enable the existing test support for the two instructions in
none/tests/ppc64/subnormal_test.c and none/tests/ppc64/jm-insns.c.
https://bugs.kde.org/show_bug.cgi?id=407340
406360 memcheck/tests/libstdc++.supp needs more supression variants
406422 none/tests/amd64-linux/map_32bits.vgtest fails too easily
406465 arm64 insn selector fails on "t0 = <expr>" where <expr> has type Ity_F16
+407340 PPC64, does not support the vlogefp, vexptefp instructions.
n-i-bz add syswrap for PTRACE_GET|SET_THREAD_AREA on amd64.
n-i-bz Fix callgrind_annotate non deterministic order for equal total
n-i-bz callgrind_annotate --threshold=100 does not print all functions.
case 0x18A: // vexptefp (2 Raised to the Exp Est FP, AV p173)
DIP("vexptefp v%d,v%d\n", vD_addr, vB_addr);
- DIP(" => not implemented\n");
/* NOTE, need to address dnormalized value handling when this is
implemented. */
- return False;
+ putVReg( vD_addr,
+ dnorm_adj_Vector( unop( Iop_Exp2_32Fx4,
+ dnorm_adj_Vector( mkexpr( vB ) ) ) ) );
+ return True;
case 0x1CA: // vlogefp (Log2 Estimate FP, AV p175)
DIP("vlogefp v%d,v%d\n", vD_addr, vB_addr);
- DIP(" => not implemented\n");
/* NOTE, need to address dnormalized value handling when this is
implemented. */
- return False;
+ putVReg( vD_addr,
+ dnorm_adj_Vector( unop( Iop_Log2_32Fx4,
+ dnorm_adj_Vector( mkexpr( vB ) ) ) ) );
+ return True;
default:
vex_printf("dis_av_fp_arith(ppc)(opc2=0x%x)\n",opc2);
/* Floating Point Unary */
case Pavfp_RCPF: return "vrefp";
case Pavfp_RSQRTF: return "vrsqrtefp";
+ case Pavfp_Log2: return "vlogefp";
+ case Pavfp_Exp2: return "vexptefp";
case Pavfp_CVTU2F: return "vcfux";
case Pavfp_CVTS2F: return "vcfsx";
case Pavfp_QCVTF2U: return "vctuxs";
switch (i->Pin.AvUn32Fx4.op) {
case Pavfp_RCPF: opc2 = 266; break; // vrefp
case Pavfp_RSQRTF: opc2 = 330; break; // vrsqrtefp
+ case Pavfp_Log2: opc2 = 458; break; // vlogefp
+ case Pavfp_Exp2: opc2 = 394; break; // vexptefp
case Pavfp_CVTU2F: opc2 = 778; break; // vcfux
case Pavfp_CVTS2F: opc2 = 842; break; // vcfsx
case Pavfp_QCVTF2U: opc2 = 906; break; // vctuxs
Pavfp_CMPEQF, Pavfp_CMPGTF, Pavfp_CMPGEF,
/* Floating point unary */
- Pavfp_RCPF, Pavfp_RSQRTF,
+ Pavfp_RCPF, Pavfp_RSQRTF, Pavfp_Log2, Pavfp_Exp2,
Pavfp_CVTU2F, Pavfp_CVTS2F, Pavfp_QCVTF2U, Pavfp_QCVTF2S,
Pavfp_ROUNDM, Pavfp_ROUNDP, Pavfp_ROUNDN, Pavfp_ROUNDZ,
}
case Iop_RecipEst32Fx4: fpop = Pavfp_RCPF; goto do_32Fx4_unary;
case Iop_RSqrtEst32Fx4: fpop = Pavfp_RSQRTF; goto do_32Fx4_unary;
+ case Iop_Log2_32Fx4: fpop = Pavfp_Log2; goto do_32Fx4_unary;
+ case Iop_Exp2_32Fx4: fpop = Pavfp_Exp2; goto do_32Fx4_unary;
case Iop_I32UtoF32x4_DEP: fpop = Pavfp_CVTU2F; goto do_32Fx4_unary;
case Iop_I32StoF32x4_DEP: fpop = Pavfp_CVTS2F; goto do_32Fx4_unary;
case Iop_QF32toI32Ux4_RZ: fpop = Pavfp_QCVTF2U; goto do_32Fx4_unary;
case Iop_Scale2_64Fx2: vex_printf("Scale2_64Fx2"); return;
case Iop_Log2_32Fx4: vex_printf("Log2_32Fx4"); return;
case Iop_Log2_64Fx2: vex_printf("Log2_64Fx2"); return;
-
+ case Iop_Exp2_32Fx4: vex_printf("Iop_Exp2_32Fx4"); return;
+
case Iop_Sub32Fx4: vex_printf("Sub32Fx4"); return;
case Iop_Sub32Fx2: vex_printf("Sub32Fx2"); return;
case Iop_Sub32F0x4: vex_printf("Sub32F0x4"); return;
TERNARY(ity_RMode,Ity_V128,Ity_V128, Ity_V128);
case Iop_Log2_32Fx4:
case Iop_Log2_64Fx2:
+ case Iop_Exp2_32Fx4:
UNARY(Ity_V128, Ity_V128);
case Iop_V128to64: case Iop_V128HIto64:
/* Vector floating-point base 2 logarithm */
Iop_Log2_32Fx4,
+ /* Vector floating-point exponential 2^x */
+ Iop_Exp2_32Fx4,
/* Vector Reciprocal Square Root Step computes (3.0 - arg1 * arg2) / 2.0.
Note, that of one of the arguments is zero and another one is infiinty
case Iop_Neg32Fx4:
case Iop_RSqrtEst32Fx4:
case Iop_Log2_32Fx4:
+ case Iop_Exp2_32Fx4:
return unary32Fx4(mce, vatom);
case Iop_I32UtoF32x2_DEP:
{ DEFOP(Iop_Sqrt32Fx4, UNDEF_UNKNOWN), },
{ DEFOP(Iop_Scale2_32Fx4, UNDEF_UNKNOWN), },
{ DEFOP(Iop_Log2_32Fx4, UNDEF_UNKNOWN), },
+ { DEFOP(Iop_Exp2_32Fx4, UNDEF_UNKNOWN), },
{ DEFOP(Iop_Neg32Fx4, UNDEF_UNKNOWN), },
{ DEFOP(Iop_RecipEst32Fx4, UNDEF_UNKNOWN), },
{ DEFOP(Iop_RecipStep32Fx4, UNDEF_UNKNOWN), },