From 41005ddb5576b8630a1084fbb3979ffa602c0599 Mon Sep 17 00:00:00 2001 From: jeffhao Date: Wed, 9 May 2012 17:58:52 -0700 Subject: Fix x86 type conversions. test-art-host-oat passes. - test-art-host-oat enabled in test builds. - Created inline versions of float-to-int and double-to-int. - Fixed calls to helper functions for long-to-float/double and float/double-to-long. - Removed storePair and replaced its use with storeBaseDispWide (fixes iput-wide and aput-wide with doubles). - Renamed helper functions to have art_ prefix. - Fixed move-exception to store the result back. - Fixed floating point comparison when the destination reg is the same as a source. The typing would get confused since the source is floating point, but the result is int, and a clobber is needed to overwrite the expected result type. A similar thing happens in float/double-to-int. Change-Id: I0a876072254411aa42d6acadb8723be030727219 --- src/compiler/codegen/GenCommon.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/compiler/codegen/GenCommon.cc') diff --git a/src/compiler/codegen/GenCommon.cc b/src/compiler/codegen/GenCommon.cc index 14eaf1db6d..c9ba285c5f 100644 --- a/src/compiler/codegen/GenCommon.cc +++ b/src/compiler/codegen/GenCommon.cc @@ -1060,7 +1060,7 @@ void genIPut(CompilationUnit* cUnit, MIR* mir, OpSize size, RegLocation rlSrc, if (isVolatile) { oatGenMemBarrier(cUnit, kST); } - storePair(cUnit, regPtr, rlSrc.lowReg, rlSrc.highReg); + storeBaseDispWide(cUnit, regPtr, 0, rlSrc.lowReg, rlSrc.highReg); if (isVolatile) { oatGenMemBarrier(cUnit, kSY); } @@ -1642,7 +1642,7 @@ void genArrayPut(CompilationUnit* cUnit, MIR* mir, OpSize size, oatFreeTemp(cUnit, regLen); } - storePair(cUnit, regPtr, rlSrc.lowReg, rlSrc.highReg); + storeBaseDispWide(cUnit, regPtr, 0, rlSrc.lowReg, rlSrc.highReg); oatFreeTemp(cUnit, regPtr); } else { -- cgit v1.2.3-59-g8ed1b