Push version 2.3.8 to trunk.

Fixed build with strict aliasing on GCC 4.4 (issue 463).

Fixed issue with incorrect handling of custom valueOf methods on string wrappers (issue 760).

Fixed compilation for ARMv4 (issue 590).

Improved performance.


git-svn-id: http://v8.googlecode.com/svn/trunk@5276 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc
index 37b6436..2453846 100644
--- a/src/ia32/macro-assembler-ia32.cc
+++ b/src/ia32/macro-assembler-ia32.cc
@@ -373,13 +373,13 @@
 
 void MacroAssembler::AbortIfNotSmi(Register object) {
   test(object, Immediate(kSmiTagMask));
-  Assert(equal, "Operand not a smi");
+  Assert(equal, "Operand is not a smi");
 }
 
 
 void MacroAssembler::AbortIfSmi(Register object) {
   test(object, Immediate(kSmiTagMask));
-  Assert(not_equal, "Operand a smi");
+  Assert(not_equal, "Operand is a smi");
 }
 
 
@@ -1549,12 +1549,10 @@
     if (scratch.is(no_reg)) scratch = dst;
     cvttsd2si(scratch, FieldOperand(source, HeapNumber::kValueOffset));
     cmp(scratch, 0x80000000u);
-    if (push_pop || dst.is(source)) {
+    if (push_pop) {
       j(not_equal, &done);
-      if (push_pop) {
-        pop(dst);
-        jmp(on_not_int32);
-      }
+      pop(dst);
+      jmp(on_not_int32);
     } else {
       j(equal, on_not_int32);
     }