Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(591)

Side by Side Diff: runtime/vm/opt_code_generator_ia32.cc

Issue 9338002: Fixed a bug in isNegate intrinsified code, fixed negation for doubles (handling of negative zeros... (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_IA32. 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_IA32.
6 #if defined(TARGET_ARCH_IA32) 6 #if defined(TARGET_ARCH_IA32)
7 7
8 #include "vm/opt_code_generator.h" 8 #include "vm/opt_code_generator.h"
9 9
10 #include "vm/assembler_macros.h" 10 #include "vm/assembler_macros.h"
(...skipping 852 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 ASSERT(kResultRegister == EAX); 863 ASSERT(kResultRegister == EAX);
864 __ popl(kOperandRegister); 864 __ popl(kOperandRegister);
865 } else if (info.is_temp()) { 865 } else if (info.is_temp()) {
866 __ movl(kResultRegister, kOperandRegister); 866 __ movl(kResultRegister, kOperandRegister);
867 } else { 867 } else {
868 const Double& double_object = 868 const Double& double_object =
869 Double::ZoneHandle(Double::New(0.0, Heap::kOld)); 869 Double::ZoneHandle(Double::New(0.0, Heap::kOld));
870 __ LoadObject(kResultRegister, double_object); 870 __ LoadObject(kResultRegister, double_object);
871 } 871 }
872 __ movsd(XMM0, FieldAddress(kOperandRegister, Double::value_offset())); 872 __ movsd(XMM0, FieldAddress(kOperandRegister, Double::value_offset()));
873 __ xorps(XMM1, XMM1); // 0.0 -> XMM1.
874 ASSERT(node->kind() == Token::kSUB); 873 ASSERT(node->kind() == Token::kSUB);
875 __ subsd(XMM1, XMM0); 874 __ DoubleNegate(XMM0);
876 __ movsd(FieldAddress(kResultRegister, Double::value_offset()), XMM1); 875 __ movsd(FieldAddress(kResultRegister, Double::value_offset()), XMM0);
877 if (CodeGenerator::IsResultNeeded(node)) { 876 if (CodeGenerator::IsResultNeeded(node)) {
878 if (node->info() != NULL) { 877 if (node->info() != NULL) {
879 node->info()->set_is_temp(using_temp); 878 node->info()->set_is_temp(using_temp);
880 node->info()->set_is_class(&double_class_); 879 node->info()->set_is_class(&double_class_);
881 } 880 }
882 HandleResult(node, kResultRegister); 881 HandleResult(node, kResultRegister);
883 } 882 }
884 } 883 }
885 884
886 885
(...skipping 2237 matching lines...) Expand 10 before | Expand all | Expand 10 after
3124 } 3123 }
3125 } 3124 }
3126 // TODO(srdjan): Implement unary kSUB (negate) Mint. 3125 // TODO(srdjan): Implement unary kSUB (negate) Mint.
3127 CodeGenerator::VisitUnaryOpNode(node); 3126 CodeGenerator::VisitUnaryOpNode(node);
3128 } 3127 }
3129 3128
3130 3129
3131 } // namespace dart 3130 } // namespace dart
3132 3131
3133 #endif // defined TARGET_ARCH_IA32 3132 #endif // defined TARGET_ARCH_IA32
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698