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

Side by Side Diff: src/ia32/macro-assembler-ia32.h

Issue 275433004: Require SSE2 support for the ia32 port. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 7 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
« no previous file with comments | « src/ia32/lithium-ia32.cc ('k') | src/ia32/macro-assembler-ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_IA32_MACRO_ASSEMBLER_IA32_H_ 5 #ifndef V8_IA32_MACRO_ASSEMBLER_IA32_H_
6 #define V8_IA32_MACRO_ASSEMBLER_IA32_H_ 6 #define V8_IA32_MACRO_ASSEMBLER_IA32_H_
7 7
8 #include "assembler.h" 8 #include "assembler.h"
9 #include "frames.h" 9 #include "frames.h"
10 #include "v8globals.h" 10 #include "v8globals.h"
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 363
364 // Check to see if maybe_number can be stored as a double in 364 // Check to see if maybe_number can be stored as a double in
365 // FastDoubleElements. If it can, store it at the index specified by key in 365 // FastDoubleElements. If it can, store it at the index specified by key in
366 // the FastDoubleElements array elements, otherwise jump to fail. 366 // the FastDoubleElements array elements, otherwise jump to fail.
367 void StoreNumberToDoubleElements(Register maybe_number, 367 void StoreNumberToDoubleElements(Register maybe_number,
368 Register elements, 368 Register elements,
369 Register key, 369 Register key,
370 Register scratch1, 370 Register scratch1,
371 XMMRegister scratch2, 371 XMMRegister scratch2,
372 Label* fail, 372 Label* fail,
373 bool specialize_for_processor,
374 int offset = 0); 373 int offset = 0);
375 374
376 // Compare an object's map with the specified map. 375 // Compare an object's map with the specified map.
377 void CompareMap(Register obj, Handle<Map> map); 376 void CompareMap(Register obj, Handle<Map> map);
378 377
379 // Check if the map of an object is equal to a specified map and branch to 378 // Check if the map of an object is equal to a specified map and branch to
380 // label if not. Skip the smi check if not required (object is known to be a 379 // label if not. Skip the smi check if not required (object is known to be a
381 // heap object). If mode is ALLOW_ELEMENT_TRANSITION_MAPS, then also match 380 // heap object). If mode is ALLOW_ELEMENT_TRANSITION_MAPS, then also match
382 // against maps that are ElementsKind transition maps of the specified map. 381 // against maps that are ElementsKind transition maps of the specified map.
383 void CheckMap(Register obj, 382 void CheckMap(Register obj,
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 431
433 void ClampDoubleToUint8(XMMRegister input_reg, 432 void ClampDoubleToUint8(XMMRegister input_reg,
434 XMMRegister scratch_reg, 433 XMMRegister scratch_reg,
435 Register result_reg); 434 Register result_reg);
436 435
437 void SlowTruncateToI(Register result_reg, Register input_reg, 436 void SlowTruncateToI(Register result_reg, Register input_reg,
438 int offset = HeapNumber::kValueOffset - kHeapObjectTag); 437 int offset = HeapNumber::kValueOffset - kHeapObjectTag);
439 438
440 void TruncateHeapNumberToI(Register result_reg, Register input_reg); 439 void TruncateHeapNumberToI(Register result_reg, Register input_reg);
441 void TruncateDoubleToI(Register result_reg, XMMRegister input_reg); 440 void TruncateDoubleToI(Register result_reg, XMMRegister input_reg);
442 void TruncateX87TOSToI(Register result_reg);
443 441
444 void DoubleToI(Register result_reg, XMMRegister input_reg, 442 void DoubleToI(Register result_reg, XMMRegister input_reg,
445 XMMRegister scratch, MinusZeroMode minus_zero_mode, 443 XMMRegister scratch, MinusZeroMode minus_zero_mode,
446 Label* conversion_failed, Label::Distance dst = Label::kFar); 444 Label* conversion_failed, Label::Distance dst = Label::kFar);
447 void X87TOSToI(Register result_reg, MinusZeroMode minus_zero_mode,
448 Label* conversion_failed, Label::Distance dst = Label::kFar);
449 445
450 void TaggedToI(Register result_reg, Register input_reg, XMMRegister temp, 446 void TaggedToI(Register result_reg, Register input_reg, XMMRegister temp,
451 MinusZeroMode minus_zero_mode, Label* lost_precision); 447 MinusZeroMode minus_zero_mode, Label* lost_precision);
452 448
453 // Smi tagging support. 449 // Smi tagging support.
454 void SmiTag(Register reg) { 450 void SmiTag(Register reg) {
455 STATIC_ASSERT(kSmiTag == 0); 451 STATIC_ASSERT(kSmiTag == 0);
456 STATIC_ASSERT(kSmiTagSize == 1); 452 STATIC_ASSERT(kSmiTagSize == 1);
457 add(reg, reg); 453 add(reg, reg);
458 } 454 }
459 void SmiUntag(Register reg) { 455 void SmiUntag(Register reg) {
460 sar(reg, kSmiTagSize); 456 sar(reg, kSmiTagSize);
461 } 457 }
462 458
463 // Modifies the register even if it does not contain a Smi! 459 // Modifies the register even if it does not contain a Smi!
464 void SmiUntag(Register reg, Label* is_smi) { 460 void SmiUntag(Register reg, Label* is_smi) {
465 STATIC_ASSERT(kSmiTagSize == 1); 461 STATIC_ASSERT(kSmiTagSize == 1);
466 sar(reg, kSmiTagSize); 462 sar(reg, kSmiTagSize);
467 STATIC_ASSERT(kSmiTag == 0); 463 STATIC_ASSERT(kSmiTag == 0);
468 j(not_carry, is_smi); 464 j(not_carry, is_smi);
469 } 465 }
470 466
471 void LoadUint32(XMMRegister dst, Register src, XMMRegister scratch); 467 void LoadUint32(XMMRegister dst, Register src, XMMRegister scratch);
472 void LoadUint32NoSSE2(Register src);
473 468
474 // Jump the register contains a smi. 469 // Jump the register contains a smi.
475 inline void JumpIfSmi(Register value, 470 inline void JumpIfSmi(Register value,
476 Label* smi_label, 471 Label* smi_label,
477 Label::Distance distance = Label::kFar) { 472 Label::Distance distance = Label::kFar) {
478 test(value, Immediate(kSmiTagMask)); 473 test(value, Immediate(kSmiTagMask));
479 j(zero, smi_label, distance); 474 j(zero, smi_label, distance);
480 } 475 }
481 // Jump if the operand is a smi. 476 // Jump if the operand is a smi.
482 inline void JumpIfSmi(Operand value, 477 inline void JumpIfSmi(Operand value,
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 819
825 // Push a handle value. 820 // Push a handle value.
826 void Push(Handle<Object> handle) { push(Immediate(handle)); } 821 void Push(Handle<Object> handle) { push(Immediate(handle)); }
827 void Push(Smi* smi) { Push(Handle<Smi>(smi, isolate())); } 822 void Push(Smi* smi) { Push(Handle<Smi>(smi, isolate())); }
828 823
829 Handle<Object> CodeObject() { 824 Handle<Object> CodeObject() {
830 ASSERT(!code_object_.is_null()); 825 ASSERT(!code_object_.is_null());
831 return code_object_; 826 return code_object_;
832 } 827 }
833 828
834 // Insert code to verify that the x87 stack has the specified depth (0-7)
835 void VerifyX87StackDepth(uint32_t depth);
836
837 // Emit code for a truncating division by a constant. The dividend register is 829 // Emit code for a truncating division by a constant. The dividend register is
838 // unchanged, the result is in edx, and eax gets clobbered. 830 // unchanged, the result is in edx, and eax gets clobbered.
839 void TruncatingDiv(Register dividend, int32_t divisor); 831 void TruncatingDiv(Register dividend, int32_t divisor);
840 832
841 // --------------------------------------------------------------------------- 833 // ---------------------------------------------------------------------------
842 // StatsCounter support 834 // StatsCounter support
843 835
844 void SetCounter(StatsCounter* counter, int value); 836 void SetCounter(StatsCounter* counter, int value);
845 void IncrementCounter(StatsCounter* counter, int value); 837 void IncrementCounter(StatsCounter* counter, int value);
846 void DecrementCounter(StatsCounter* counter, int value); 838 void DecrementCounter(StatsCounter* counter, int value);
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
1090 } \ 1082 } \
1091 masm-> 1083 masm->
1092 #else 1084 #else
1093 #define ACCESS_MASM(masm) masm-> 1085 #define ACCESS_MASM(masm) masm->
1094 #endif 1086 #endif
1095 1087
1096 1088
1097 } } // namespace v8::internal 1089 } } // namespace v8::internal
1098 1090
1099 #endif // V8_IA32_MACRO_ASSEMBLER_IA32_H_ 1091 #endif // V8_IA32_MACRO_ASSEMBLER_IA32_H_
OLDNEW
« no previous file with comments | « src/ia32/lithium-ia32.cc ('k') | src/ia32/macro-assembler-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698