|
From: <sv...@va...> - 2014-05-15 16:49:28
|
Author: sewardj
Date: Thu May 15 16:49:21 2014
New Revision: 2862
Log:
Initial front-end fixings needed to handle code generated by gcc-4.9
on arm64-linux.
Modified:
trunk/priv/guest_arm64_toIR.c
Modified: trunk/priv/guest_arm64_toIR.c
==============================================================================
--- trunk/priv/guest_arm64_toIR.c (original)
+++ trunk/priv/guest_arm64_toIR.c Thu May 15 16:49:21 2014
@@ -1004,6 +1004,8 @@
{
Int off = offsetQRegLane(qregNo, ty, 0);
switch (ty) {
+ case Ity_I8:
+ case Ity_I16:
case Ity_I32: case Ity_I64:
case Ity_F32: case Ity_F64: case Ity_V128:
break;
@@ -7102,6 +7104,20 @@
/* else it's really an ORR; fall through. */
}
+ /* ---------------- CMEQ_d_d_#0 ---------------- */
+ /*
+ 010 11110 11 10000 0100 110 n d
+ */
+ if ((INSN(31,0) & 0xFFFFFC00) == 0x5EE09800) {
+ UInt nn = INSN(9,5);
+ UInt dd = INSN(4,0);
+ putQReg128(dd, unop(Iop_ZeroHI64ofV128,
+ binop(Iop_CmpEQ64x2, getQReg128(nn),
+ mkV128(0x0000))));
+ DIP("cmeq d%u, d%u, #0\n", dd, nn);
+ return True;
+ }
+
vex_printf("ARM64 front end: simd_and_fp\n");
return False;
# undef INSN
|