Populate call info and inline float/double conversions on x86.

Also cleaned up neg-float/neg-double implementation.

Change-Id: I8e7fe76e36d3c31bae0a82a956691202c09b8e0c
diff --git a/src/compiler/codegen/x86/FP/X86FP.cc b/src/compiler/codegen/x86/FP/X86FP.cc
index bb648bf..be628db 100644
--- a/src/compiler/codegen/x86/FP/X86FP.cc
+++ b/src/compiler/codegen/x86/FP/X86FP.cc
@@ -21,7 +21,6 @@
                             RegLocation rlSrc2) {
   X86OpCode op = kX86Nop;
   RegLocation rlResult;
-  int tempReg;
 
   /*
    * Don't attempt to optimize register usage since these opcodes call out to
@@ -44,27 +43,10 @@
     case Instruction::MUL_FLOAT:
       op = kX86MulssRR;
       break;
-    case Instruction::NEG_FLOAT: {
-      // TODO: Make this an XorpsRM where the memory location holds 0x80000000
-      rlSrc1 = loadValue(cUnit, rlSrc1, kFPReg);
-      rlResult = oatEvalLoc(cUnit, rlDest, kFPReg, true);
-      tempReg = oatAllocTemp(cUnit);
-      loadConstantNoClobber(cUnit, tempReg, 0x80000000);
-      int rDest = rlResult.lowReg;
-      int rSrc1 = rlSrc1.lowReg;
-      if (rDest == rSrc1) {
-        rSrc1 = oatAllocTempFloat(cUnit);
-        opRegCopy(cUnit, rSrc1, rDest);
-      }
-      newLIR2(cUnit, kX86MovdxrRR, rDest, tempReg);
-      newLIR2(cUnit, kX86XorpsRR, rDest, rSrc1);
-      storeValue(cUnit, rlDest, rlResult);
-      return false;
-    }
+    case Instruction::NEG_FLOAT:
     case Instruction::REM_FLOAT_2ADDR:
-    case Instruction::REM_FLOAT: {
+    case Instruction::REM_FLOAT:
       return genArithOpFloatPortable(cUnit, opcode, rlDest, rlSrc1, rlSrc2);
-    }
     default:
       return true;
   }
@@ -90,7 +72,6 @@
                              RegLocation rlSrc2) {
   X86OpCode op = kX86Nop;
   RegLocation rlResult;
-  int tempReg;
 
   switch (opcode) {
     case Instruction::ADD_DOUBLE_2ADDR:
@@ -109,28 +90,10 @@
     case Instruction::MUL_DOUBLE:
       op = kX86MulsdRR;
       break;
-    case Instruction::NEG_DOUBLE: {
-      // TODO: Make this an XorpdRM where the memory location holds 0x8000000000000000
-      rlSrc1 = loadValueWide(cUnit, rlSrc1, kFPReg);
-      rlResult = oatEvalLoc(cUnit, rlDest, kFPReg, true);
-      tempReg = oatAllocTemp(cUnit);
-      loadConstantNoClobber(cUnit, tempReg, 0x80000000);
-      int rDest = S2D(rlResult.lowReg, rlResult.highReg);
-      int rSrc1 = S2D(rlSrc1.lowReg, rlSrc1.highReg);
-      if (rDest == rSrc1) {
-        rSrc1 = oatAllocTempDouble(cUnit) | FP_DOUBLE;
-        opRegCopy(cUnit, rSrc1, rDest);
-      }
-      newLIR2(cUnit, kX86MovdxrRR, rDest, tempReg);
-      newLIR2(cUnit, kX86PsllqRI, rDest, 32);
-      newLIR2(cUnit, kX86XorpsRR, rDest, rSrc1);
-      storeValueWide(cUnit, rlDest, rlResult);
-      return false;
-    }
+    case Instruction::NEG_DOUBLE:
     case Instruction::REM_DOUBLE_2ADDR:
-    case Instruction::REM_DOUBLE: {
+    case Instruction::REM_DOUBLE:
       return genArithOpDoublePortable(cUnit, opcode, rlDest, rlSrc1, rlSrc2);
-    }
     default:
       return true;
   }
@@ -221,9 +184,7 @@
     }
     case Instruction::LONG_TO_DOUBLE:
     case Instruction::LONG_TO_FLOAT:
-      // These can be implemented inline by using memory as a 64-bit source.
-      // However, this can't be done easily if the register has been promoted.
-      UNIMPLEMENTED(WARNING) << "inline l2[df] " << PrettyMethod(cUnit->method_idx, *cUnit->dex_file);
+      // TODO: inline by using memory as a 64-bit source. Be careful about promoted registers.
     case Instruction::FLOAT_TO_LONG:
     case Instruction::DOUBLE_TO_LONG:
       return genConversionPortable(cUnit, opcode, rlDest, rlSrc);