summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorGabor Rapcsanyi <rgabor@webkit.org>2013-03-21 15:36:39 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-03-25 11:56:42 +0100
commit085292adba8e6e7b3105b71abae82aff843f6708 (patch)
tree3411574c9cc14a1fa37a47db1249288e6b5ec5a8 /Source
parent8c4daa81f8005b474a66db1bf6eba42fc9fb649b (diff)
downloadqtwebkit-085292adba8e6e7b3105b71abae82aff843f6708.tar.gz
LLInt CLoop backend misses Double2Ints() on 32bit architectures
https://bugs.webkit.org/show_bug.cgi?id=112141 Reviewed by Filip Pizlo. Implement Double2Ints() in CLoop backend of LLInt on 32bit architectures. * llint/LowLevelInterpreter.cpp: (LLInt): (JSC::LLInt::Double2Ints): * offlineasm/cloop.rb: Change-Id: I0617d06eda59afec2f0ddc7268ac1531f275f9ec git-svn-id: http://svn.webkit.org/repository/webkit/trunk@145551 268f45cc-cd09-0410-ab3c-d52691b4dbfc Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Diffstat (limited to 'Source')
-rw-r--r--Source/JavaScriptCore/llint/LowLevelInterpreter.cpp11
-rw-r--r--Source/JavaScriptCore/offlineasm/cloop.rb2
2 files changed, 12 insertions, 1 deletions
diff --git a/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp b/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp
index a9cb393b0..b2ce2483e 100644
--- a/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp
+++ b/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp
@@ -116,6 +116,17 @@ static double Ints2Double(uint32_t lo, uint32_t hi)
u.ival64 = (static_cast<uint64_t>(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<uint32_t>(u.ival64 >> 32);
+ lo = static_cast<uint32_t>(u.ival64);
+}
#endif // USE(JSVALUE32_64)
} // namespace LLint
diff --git a/Source/JavaScriptCore/offlineasm/cloop.rb b/Source/JavaScriptCore/offlineasm/cloop.rb
index cbe7e2ca1..8d0838ebd 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.