summaryrefslogtreecommitdiffstats
path: root/src/arm/virtual-frame-arm.cc
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2010-07-08 12:39:36 +0100
committerSteve Block <steveblock@google.com>2010-07-08 12:41:04 +0100
commit8defd9ff6930b4e24729971a61cf7469daf119be (patch)
tree3be589af44201dcaead530f4046cb63e7c9b68c4 /src/arm/virtual-frame-arm.cc
parent85dec77e821ae98054f8e09ba3180c148a9264d6 (diff)
downloadandroid_external_v8-8defd9ff6930b4e24729971a61cf7469daf119be.tar.gz
android_external_v8-8defd9ff6930b4e24729971a61cf7469daf119be.tar.bz2
android_external_v8-8defd9ff6930b4e24729971a61cf7469daf119be.zip
Update V8 to r5017 as required by WebKit r62496
Change-Id: I1b4b7718d1d77ceef07f543e9150a2cb3a628f3a
Diffstat (limited to 'src/arm/virtual-frame-arm.cc')
-rw-r--r--src/arm/virtual-frame-arm.cc44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/arm/virtual-frame-arm.cc b/src/arm/virtual-frame-arm.cc
index 8b90f424..2ddfd0fd 100644
--- a/src/arm/virtual-frame-arm.cc
+++ b/src/arm/virtual-frame-arm.cc
@@ -482,6 +482,32 @@ void VirtualFrame::SpillAllButCopyTOSToR0() {
}
+void VirtualFrame::SpillAllButCopyTOSToR1() {
+ switch (top_of_stack_state_) {
+ case NO_TOS_REGISTERS:
+ __ ldr(r1, MemOperand(sp, 0));
+ break;
+ case R0_TOS:
+ __ push(r0);
+ __ mov(r1, r0);
+ break;
+ case R1_TOS:
+ __ push(r1);
+ break;
+ case R0_R1_TOS:
+ __ Push(r1, r0);
+ __ mov(r1, r0);
+ break;
+ case R1_R0_TOS:
+ __ Push(r0, r1);
+ break;
+ default:
+ UNREACHABLE();
+ }
+ top_of_stack_state_ = NO_TOS_REGISTERS;
+}
+
+
void VirtualFrame::SpillAllButCopyTOSToR1R0() {
switch (top_of_stack_state_) {
case NO_TOS_REGISTERS:
@@ -524,6 +550,24 @@ Register VirtualFrame::Peek() {
}
+Register VirtualFrame::Peek2() {
+ AssertIsNotSpilled();
+ switch (top_of_stack_state_) {
+ case NO_TOS_REGISTERS:
+ case R0_TOS:
+ case R0_R1_TOS:
+ MergeTOSTo(R0_R1_TOS);
+ return r1;
+ case R1_TOS:
+ case R1_R0_TOS:
+ MergeTOSTo(R1_R0_TOS);
+ return r0;
+ }
+ UNREACHABLE();
+ return no_reg;
+}
+
+
void VirtualFrame::Dup() {
if (SpilledScope::is_spilled()) {
__ ldr(ip, MemOperand(sp, 0));