Update V8 to r4588

We're using WebKit r58033, as used by
http://src.chromium.org/svn/releases/5.0.387.0/DEPS
This requires http://v8.googlecode.com/svn/trunk@4465 but this version has a
crashing bug for ARM. Instead we use http://v8.googlecode.com/svn/trunk@4588,
which is used by http://src.chromium.org/svn/releases/6.0.399.0/DEPS

Note that a trivial bug fix was required in arm/codegen-arm.cc. This is guarded
with ANDROID. See http://code.google.com/p/v8/issues/detail?id=703

Change-Id: I459647a8286c4f8c7405f0c5581ecbf051a6f1e8
diff --git a/test/cctest/test-disasm-ia32.cc b/test/cctest/test-disasm-ia32.cc
index 7b0ad99..02e64b4 100644
--- a/test/cctest/test-disasm-ia32.cc
+++ b/test/cctest/test-disasm-ia32.cc
@@ -234,7 +234,9 @@
   __ imul(edx, ecx, 12);
   __ imul(edx, ecx, 1000);
 
+  __ cld();
   __ rep_movs();
+  __ rep_stos();
 
   __ sub(edx, Operand(ebx, ecx, times_4, 10000));
   __ sub(edx, Operand(ebx));
@@ -359,45 +361,47 @@
   __ fwait();
   __ nop();
   {
-    CHECK(CpuFeatures::IsSupported(SSE2));
-    CpuFeatures::Scope fscope(SSE2);
-    __ cvttss2si(edx, Operand(ebx, ecx, times_4, 10000));
-    __ cvtsi2sd(xmm1, Operand(ebx, ecx, times_4, 10000));
-    __ addsd(xmm1, xmm0);
-    __ mulsd(xmm1, xmm0);
-    __ subsd(xmm1, xmm0);
-    __ divsd(xmm1, xmm0);
-    __ movdbl(xmm1, Operand(ebx, ecx, times_4, 10000));
-    __ movdbl(Operand(ebx, ecx, times_4, 10000), xmm1);
-    __ comisd(xmm0, xmm1);
+    if (CpuFeatures::IsSupported(SSE2)) {
+      CpuFeatures::Scope fscope(SSE2);
+      __ cvttss2si(edx, Operand(ebx, ecx, times_4, 10000));
+      __ cvtsi2sd(xmm1, Operand(ebx, ecx, times_4, 10000));
+      __ addsd(xmm1, xmm0);
+      __ mulsd(xmm1, xmm0);
+      __ subsd(xmm1, xmm0);
+      __ divsd(xmm1, xmm0);
+      __ movdbl(xmm1, Operand(ebx, ecx, times_4, 10000));
+      __ movdbl(Operand(ebx, ecx, times_4, 10000), xmm1);
+      __ comisd(xmm0, xmm1);
 
-    // 128 bit move instructions.
-    __ movdqa(xmm0, Operand(ebx, ecx, times_4, 10000));
-    __ movdqa(Operand(ebx, ecx, times_4, 10000), xmm0);
-    __ movdqu(xmm0, Operand(ebx, ecx, times_4, 10000));
-    __ movdqu(Operand(ebx, ecx, times_4, 10000), xmm0);
+      // 128 bit move instructions.
+      __ movdqa(xmm0, Operand(ebx, ecx, times_4, 10000));
+      __ movdqa(Operand(ebx, ecx, times_4, 10000), xmm0);
+      __ movdqu(xmm0, Operand(ebx, ecx, times_4, 10000));
+      __ movdqu(Operand(ebx, ecx, times_4, 10000), xmm0);
+    }
   }
 
   // cmov.
   {
-    CHECK(CpuFeatures::IsSupported(CMOV));
-    CpuFeatures::Scope use_cmov(CMOV);
-    __ cmov(overflow, eax, Operand(eax, 0));
-    __ cmov(no_overflow, eax, Operand(eax, 1));
-    __ cmov(below, eax, Operand(eax, 2));
-    __ cmov(above_equal, eax, Operand(eax, 3));
-    __ cmov(equal, eax, Operand(ebx, 0));
-    __ cmov(not_equal, eax, Operand(ebx, 1));
-    __ cmov(below_equal, eax, Operand(ebx, 2));
-    __ cmov(above, eax, Operand(ebx, 3));
-    __ cmov(sign, eax, Operand(ecx, 0));
-    __ cmov(not_sign, eax, Operand(ecx, 1));
-    __ cmov(parity_even, eax, Operand(ecx, 2));
-    __ cmov(parity_odd, eax, Operand(ecx, 3));
-    __ cmov(less, eax, Operand(edx, 0));
-    __ cmov(greater_equal, eax, Operand(edx, 1));
-    __ cmov(less_equal, eax, Operand(edx, 2));
-    __ cmov(greater, eax, Operand(edx, 3));
+    if (CpuFeatures::IsSupported(CMOV)) {
+      CpuFeatures::Scope use_cmov(CMOV);
+      __ cmov(overflow, eax, Operand(eax, 0));
+      __ cmov(no_overflow, eax, Operand(eax, 1));
+      __ cmov(below, eax, Operand(eax, 2));
+      __ cmov(above_equal, eax, Operand(eax, 3));
+      __ cmov(equal, eax, Operand(ebx, 0));
+      __ cmov(not_equal, eax, Operand(ebx, 1));
+      __ cmov(below_equal, eax, Operand(ebx, 2));
+      __ cmov(above, eax, Operand(ebx, 3));
+      __ cmov(sign, eax, Operand(ecx, 0));
+      __ cmov(not_sign, eax, Operand(ecx, 1));
+      __ cmov(parity_even, eax, Operand(ecx, 2));
+      __ cmov(parity_odd, eax, Operand(ecx, 3));
+      __ cmov(less, eax, Operand(edx, 0));
+      __ cmov(greater_equal, eax, Operand(edx, 1));
+      __ cmov(less_equal, eax, Operand(edx, 2));
+      __ cmov(greater, eax, Operand(edx, 3));
+    }
   }
 
   __ ret(0);