From: rgabor@webkit.org Date: Tue, 12 Mar 2013 15:28:10 +0000 (+0000) Subject: https://bugs.webkit.org/show_bug.cgi?id=112141 X-Git-Url: http://git.webkit.org/?p=WebKit-https.git;a=commitdiff_plain;h=f483edd69ceba6be7abc9d679f567132e368a805 https://bugs.webkit.org/show_bug.cgi?id=112141 LLInt CLoop backend misses Double2Ints() on 32bit architectures Reviewed by Filip Pizlo. Implement Double2Ints() in CLoop backend of LLInt on 32bit architectures. * llint/LowLevelInterpreter.cpp: (LLInt): (JSC::LLInt::Double2Ints): * offlineasm/cloop.rb: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@145551 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog index 2ca902a..4319a4d 100644 --- a/Source/JavaScriptCore/ChangeLog +++ b/Source/JavaScriptCore/ChangeLog @@ -1,5 +1,19 @@ 2013-03-12 Gabor Rapcsanyi + https://bugs.webkit.org/show_bug.cgi?id=112141 + LLInt CLoop backend misses Double2Ints() on 32bit architectures + + Reviewed by Filip Pizlo. + + Implement Double2Ints() in CLoop backend of LLInt on 32bit architectures. + + * llint/LowLevelInterpreter.cpp: + (LLInt): + (JSC::LLInt::Double2Ints): + * offlineasm/cloop.rb: + +2013-03-12 Gabor Rapcsanyi + Making more sophisticated cache flush on ARM Linux platform https://bugs.webkit.org/show_bug.cgi?id=111854 diff --git a/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp b/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp index d3c73b0..186c659 100644 --- a/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp +++ b/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp @@ -117,6 +117,17 @@ static double Ints2Double(uint32_t lo, uint32_t hi) u.ival64 = (static_cast(hi) << 32) | lo; return u.dval; } + +static void Double2Ints(double val, uint32_t& lo, uint32_t& hi) +{ + union { + double dval; + uint64_t ival64; + } u; + u.dval = val; + hi = static_cast(u.ival64 >> 32); + lo = static_cast(u.ival64); +} #endif // USE(JSVALUE32_64) } // namespace LLint diff --git a/Source/JavaScriptCore/offlineasm/cloop.rb b/Source/JavaScriptCore/offlineasm/cloop.rb index 14cacb9..f6bd552 100644 --- a/Source/JavaScriptCore/offlineasm/cloop.rb +++ b/Source/JavaScriptCore/offlineasm/cloop.rb @@ -1025,7 +1025,7 @@ class Instruction # 32-bit instruction: f2dii dblOp int32LoOp int32HiOp (based on ARMv7) # Encode a 64-bit double into 2 32-bit ints (low and high). when "fd2ii" - $asm.putc "Double2Ints(#{operands[0].clValue(:double)}, #{operands[1].clValue}, #{operands[2].clValue});" + $asm.putc "Double2Ints(#{operands[0].clValue(:double)}, #{operands[1].clValue(:uint32)}, #{operands[2].clValue(:uint32)});" # 64-bit instruction: fq2d int64Op dblOp (based on X64) # Copy a bit-encoded double in a 64-bit int register to a double register.