| OLD | NEW | 
|---|
| 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 #if V8_TARGET_ARCH_IA32 | 5 #if V8_TARGET_ARCH_IA32 | 
| 6 | 6 | 
| 7 #include "src/base/bits.h" | 7 #include "src/base/bits.h" | 
| 8 #include "src/base/division-by-constant.h" | 8 #include "src/base/division-by-constant.h" | 
| 9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" | 
| 10 #include "src/codegen.h" | 10 #include "src/codegen.h" | 
| (...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 447     JumpIfSmi(value, &done, Label::kNear); | 447     JumpIfSmi(value, &done, Label::kNear); | 
| 448   } | 448   } | 
| 449 | 449 | 
| 450   // Although the object register is tagged, the offset is relative to the start | 450   // Although the object register is tagged, the offset is relative to the start | 
| 451   // of the object, so so offset must be a multiple of kPointerSize. | 451   // of the object, so so offset must be a multiple of kPointerSize. | 
| 452   DCHECK(IsAligned(offset, kPointerSize)); | 452   DCHECK(IsAligned(offset, kPointerSize)); | 
| 453 | 453 | 
| 454   lea(dst, FieldOperand(object, offset)); | 454   lea(dst, FieldOperand(object, offset)); | 
| 455   if (emit_debug_code()) { | 455   if (emit_debug_code()) { | 
| 456     Label ok; | 456     Label ok; | 
| 457     test_b(dst, (1 << kPointerSizeLog2) - 1); | 457     test_b(dst, Immediate((1 << kPointerSizeLog2) - 1)); | 
| 458     j(zero, &ok, Label::kNear); | 458     j(zero, &ok, Label::kNear); | 
| 459     int3(); | 459     int3(); | 
| 460     bind(&ok); | 460     bind(&ok); | 
| 461   } | 461   } | 
| 462 | 462 | 
| 463   RecordWrite(object, dst, value, save_fp, remembered_set_action, | 463   RecordWrite(object, dst, value, save_fp, remembered_set_action, | 
| 464               OMIT_SMI_CHECK, pointers_to_here_check_for_value); | 464               OMIT_SMI_CHECK, pointers_to_here_check_for_value); | 
| 465 | 465 | 
| 466   bind(&done); | 466   bind(&done); | 
| 467 | 467 | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 480     Register scratch1, | 480     Register scratch1, | 
| 481     Register scratch2, | 481     Register scratch2, | 
| 482     SaveFPRegsMode save_fp) { | 482     SaveFPRegsMode save_fp) { | 
| 483   Label done; | 483   Label done; | 
| 484 | 484 | 
| 485   Register address = scratch1; | 485   Register address = scratch1; | 
| 486   Register value = scratch2; | 486   Register value = scratch2; | 
| 487   if (emit_debug_code()) { | 487   if (emit_debug_code()) { | 
| 488     Label ok; | 488     Label ok; | 
| 489     lea(address, FieldOperand(object, HeapObject::kMapOffset)); | 489     lea(address, FieldOperand(object, HeapObject::kMapOffset)); | 
| 490     test_b(address, (1 << kPointerSizeLog2) - 1); | 490     test_b(address, Immediate((1 << kPointerSizeLog2) - 1)); | 
| 491     j(zero, &ok, Label::kNear); | 491     j(zero, &ok, Label::kNear); | 
| 492     int3(); | 492     int3(); | 
| 493     bind(&ok); | 493     bind(&ok); | 
| 494   } | 494   } | 
| 495 | 495 | 
| 496   DCHECK(!object.is(value)); | 496   DCHECK(!object.is(value)); | 
| 497   DCHECK(!object.is(address)); | 497   DCHECK(!object.is(address)); | 
| 498   DCHECK(!value.is(address)); | 498   DCHECK(!value.is(address)); | 
| 499   AssertNotSmi(object); | 499   AssertNotSmi(object); | 
| 500 | 500 | 
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 801 | 801 | 
| 802 void MacroAssembler::CmpObjectType(Register heap_object, | 802 void MacroAssembler::CmpObjectType(Register heap_object, | 
| 803                                    InstanceType type, | 803                                    InstanceType type, | 
| 804                                    Register map) { | 804                                    Register map) { | 
| 805   mov(map, FieldOperand(heap_object, HeapObject::kMapOffset)); | 805   mov(map, FieldOperand(heap_object, HeapObject::kMapOffset)); | 
| 806   CmpInstanceType(map, type); | 806   CmpInstanceType(map, type); | 
| 807 } | 807 } | 
| 808 | 808 | 
| 809 | 809 | 
| 810 void MacroAssembler::CmpInstanceType(Register map, InstanceType type) { | 810 void MacroAssembler::CmpInstanceType(Register map, InstanceType type) { | 
| 811   cmpb(FieldOperand(map, Map::kInstanceTypeOffset), | 811   cmpb(FieldOperand(map, Map::kInstanceTypeOffset), Immediate(type)); | 
| 812        static_cast<int8_t>(type)); |  | 
| 813 } | 812 } | 
| 814 | 813 | 
| 815 | 814 | 
| 816 void MacroAssembler::CheckFastElements(Register map, | 815 void MacroAssembler::CheckFastElements(Register map, | 
| 817                                        Label* fail, | 816                                        Label* fail, | 
| 818                                        Label::Distance distance) { | 817                                        Label::Distance distance) { | 
| 819   STATIC_ASSERT(FAST_SMI_ELEMENTS == 0); | 818   STATIC_ASSERT(FAST_SMI_ELEMENTS == 0); | 
| 820   STATIC_ASSERT(FAST_HOLEY_SMI_ELEMENTS == 1); | 819   STATIC_ASSERT(FAST_HOLEY_SMI_ELEMENTS == 1); | 
| 821   STATIC_ASSERT(FAST_ELEMENTS == 2); | 820   STATIC_ASSERT(FAST_ELEMENTS == 2); | 
| 822   STATIC_ASSERT(FAST_HOLEY_ELEMENTS == 3); | 821   STATIC_ASSERT(FAST_HOLEY_ELEMENTS == 3); | 
| 823   cmpb(FieldOperand(map, Map::kBitField2Offset), | 822   cmpb(FieldOperand(map, Map::kBitField2Offset), | 
| 824        Map::kMaximumBitField2FastHoleyElementValue); | 823        Immediate(Map::kMaximumBitField2FastHoleyElementValue)); | 
| 825   j(above, fail, distance); | 824   j(above, fail, distance); | 
| 826 } | 825 } | 
| 827 | 826 | 
| 828 | 827 | 
| 829 void MacroAssembler::CheckFastObjectElements(Register map, | 828 void MacroAssembler::CheckFastObjectElements(Register map, | 
| 830                                              Label* fail, | 829                                              Label* fail, | 
| 831                                              Label::Distance distance) { | 830                                              Label::Distance distance) { | 
| 832   STATIC_ASSERT(FAST_SMI_ELEMENTS == 0); | 831   STATIC_ASSERT(FAST_SMI_ELEMENTS == 0); | 
| 833   STATIC_ASSERT(FAST_HOLEY_SMI_ELEMENTS == 1); | 832   STATIC_ASSERT(FAST_HOLEY_SMI_ELEMENTS == 1); | 
| 834   STATIC_ASSERT(FAST_ELEMENTS == 2); | 833   STATIC_ASSERT(FAST_ELEMENTS == 2); | 
| 835   STATIC_ASSERT(FAST_HOLEY_ELEMENTS == 3); | 834   STATIC_ASSERT(FAST_HOLEY_ELEMENTS == 3); | 
| 836   cmpb(FieldOperand(map, Map::kBitField2Offset), | 835   cmpb(FieldOperand(map, Map::kBitField2Offset), | 
| 837        Map::kMaximumBitField2FastHoleySmiElementValue); | 836        Immediate(Map::kMaximumBitField2FastHoleySmiElementValue)); | 
| 838   j(below_equal, fail, distance); | 837   j(below_equal, fail, distance); | 
| 839   cmpb(FieldOperand(map, Map::kBitField2Offset), | 838   cmpb(FieldOperand(map, Map::kBitField2Offset), | 
| 840        Map::kMaximumBitField2FastHoleyElementValue); | 839        Immediate(Map::kMaximumBitField2FastHoleyElementValue)); | 
| 841   j(above, fail, distance); | 840   j(above, fail, distance); | 
| 842 } | 841 } | 
| 843 | 842 | 
| 844 | 843 | 
| 845 void MacroAssembler::CheckFastSmiElements(Register map, | 844 void MacroAssembler::CheckFastSmiElements(Register map, | 
| 846                                           Label* fail, | 845                                           Label* fail, | 
| 847                                           Label::Distance distance) { | 846                                           Label::Distance distance) { | 
| 848   STATIC_ASSERT(FAST_SMI_ELEMENTS == 0); | 847   STATIC_ASSERT(FAST_SMI_ELEMENTS == 0); | 
| 849   STATIC_ASSERT(FAST_HOLEY_SMI_ELEMENTS == 1); | 848   STATIC_ASSERT(FAST_HOLEY_SMI_ELEMENTS == 1); | 
| 850   cmpb(FieldOperand(map, Map::kBitField2Offset), | 849   cmpb(FieldOperand(map, Map::kBitField2Offset), | 
| 851        Map::kMaximumBitField2FastHoleySmiElementValue); | 850        Immediate(Map::kMaximumBitField2FastHoleySmiElementValue)); | 
| 852   j(above, fail, distance); | 851   j(above, fail, distance); | 
| 853 } | 852 } | 
| 854 | 853 | 
| 855 | 854 | 
| 856 void MacroAssembler::StoreNumberToDoubleElements( | 855 void MacroAssembler::StoreNumberToDoubleElements( | 
| 857     Register maybe_number, | 856     Register maybe_number, | 
| 858     Register elements, | 857     Register elements, | 
| 859     Register key, | 858     Register key, | 
| 860     Register scratch1, | 859     Register scratch1, | 
| 861     XMMRegister scratch2, | 860     XMMRegister scratch2, | 
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 930   test(instance_type, Immediate(kIsNotStringMask)); | 929   test(instance_type, Immediate(kIsNotStringMask)); | 
| 931   return zero; | 930   return zero; | 
| 932 } | 931 } | 
| 933 | 932 | 
| 934 | 933 | 
| 935 Condition MacroAssembler::IsObjectNameType(Register heap_object, | 934 Condition MacroAssembler::IsObjectNameType(Register heap_object, | 
| 936                                            Register map, | 935                                            Register map, | 
| 937                                            Register instance_type) { | 936                                            Register instance_type) { | 
| 938   mov(map, FieldOperand(heap_object, HeapObject::kMapOffset)); | 937   mov(map, FieldOperand(heap_object, HeapObject::kMapOffset)); | 
| 939   movzx_b(instance_type, FieldOperand(map, Map::kInstanceTypeOffset)); | 938   movzx_b(instance_type, FieldOperand(map, Map::kInstanceTypeOffset)); | 
| 940   cmpb(instance_type, static_cast<uint8_t>(LAST_NAME_TYPE)); | 939   cmpb(instance_type, Immediate(LAST_NAME_TYPE)); | 
| 941   return below_equal; | 940   return below_equal; | 
| 942 } | 941 } | 
| 943 | 942 | 
| 944 | 943 | 
| 945 void MacroAssembler::FCmp() { | 944 void MacroAssembler::FCmp() { | 
| 946   fucomip(); | 945   fucomip(); | 
| 947   fstp(0); | 946   fstp(0); | 
| 948 } | 947 } | 
| 949 | 948 | 
| 950 | 949 | 
| (...skipping 1045 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1996 | 1995 | 
| 1997 | 1996 | 
| 1998 void MacroAssembler::BooleanBitTest(Register object, | 1997 void MacroAssembler::BooleanBitTest(Register object, | 
| 1999                                     int field_offset, | 1998                                     int field_offset, | 
| 2000                                     int bit_index) { | 1999                                     int bit_index) { | 
| 2001   bit_index += kSmiTagSize + kSmiShiftSize; | 2000   bit_index += kSmiTagSize + kSmiShiftSize; | 
| 2002   DCHECK(base::bits::IsPowerOfTwo32(kBitsPerByte)); | 2001   DCHECK(base::bits::IsPowerOfTwo32(kBitsPerByte)); | 
| 2003   int byte_index = bit_index / kBitsPerByte; | 2002   int byte_index = bit_index / kBitsPerByte; | 
| 2004   int byte_bit_index = bit_index & (kBitsPerByte - 1); | 2003   int byte_bit_index = bit_index & (kBitsPerByte - 1); | 
| 2005   test_b(FieldOperand(object, field_offset + byte_index), | 2004   test_b(FieldOperand(object, field_offset + byte_index), | 
| 2006          static_cast<byte>(1 << byte_bit_index)); | 2005          Immediate(1 << byte_bit_index)); | 
| 2007 } | 2006 } | 
| 2008 | 2007 | 
| 2009 | 2008 | 
| 2010 | 2009 | 
| 2011 void MacroAssembler::NegativeZeroTest(Register result, | 2010 void MacroAssembler::NegativeZeroTest(Register result, | 
| 2012                                       Register op, | 2011                                       Register op, | 
| 2013                                       Label* then_label) { | 2012                                       Label* then_label) { | 
| 2014   Label ok; | 2013   Label ok; | 
| 2015   test(result, result); | 2014   test(result, result); | 
| 2016   j(not_zero, &ok, Label::kNear); | 2015   j(not_zero, &ok, Label::kNear); | 
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2317   } | 2316   } | 
| 2318 } | 2317 } | 
| 2319 | 2318 | 
| 2320 | 2319 | 
| 2321 void MacroAssembler::FloodFunctionIfStepping(Register fun, Register new_target, | 2320 void MacroAssembler::FloodFunctionIfStepping(Register fun, Register new_target, | 
| 2322                                              const ParameterCount& expected, | 2321                                              const ParameterCount& expected, | 
| 2323                                              const ParameterCount& actual) { | 2322                                              const ParameterCount& actual) { | 
| 2324   Label skip_flooding; | 2323   Label skip_flooding; | 
| 2325   ExternalReference step_in_enabled = | 2324   ExternalReference step_in_enabled = | 
| 2326       ExternalReference::debug_step_in_enabled_address(isolate()); | 2325       ExternalReference::debug_step_in_enabled_address(isolate()); | 
| 2327   cmpb(Operand::StaticVariable(step_in_enabled), 0); | 2326   cmpb(Operand::StaticVariable(step_in_enabled), Immediate(0)); | 
| 2328   j(equal, &skip_flooding); | 2327   j(equal, &skip_flooding); | 
| 2329   { | 2328   { | 
| 2330     FrameScope frame(this, | 2329     FrameScope frame(this, | 
| 2331                      has_frame() ? StackFrame::NONE : StackFrame::INTERNAL); | 2330                      has_frame() ? StackFrame::NONE : StackFrame::INTERNAL); | 
| 2332     if (expected.is_reg()) { | 2331     if (expected.is_reg()) { | 
| 2333       SmiTag(expected.reg()); | 2332       SmiTag(expected.reg()); | 
| 2334       Push(expected.reg()); | 2333       Push(expected.reg()); | 
| 2335     } | 2334     } | 
| 2336     if (actual.is_reg()) { | 2335     if (actual.is_reg()) { | 
| 2337       SmiTag(actual.reg()); | 2336       SmiTag(actual.reg()); | 
| (...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3007 } | 3006 } | 
| 3008 | 3007 | 
| 3009 | 3008 | 
| 3010 void MacroAssembler::JumpIfNotUniqueNameInstanceType(Operand operand, | 3009 void MacroAssembler::JumpIfNotUniqueNameInstanceType(Operand operand, | 
| 3011                                                      Label* not_unique_name, | 3010                                                      Label* not_unique_name, | 
| 3012                                                      Label::Distance distance) { | 3011                                                      Label::Distance distance) { | 
| 3013   STATIC_ASSERT(kInternalizedTag == 0 && kStringTag == 0); | 3012   STATIC_ASSERT(kInternalizedTag == 0 && kStringTag == 0); | 
| 3014   Label succeed; | 3013   Label succeed; | 
| 3015   test(operand, Immediate(kIsNotStringMask | kIsNotInternalizedMask)); | 3014   test(operand, Immediate(kIsNotStringMask | kIsNotInternalizedMask)); | 
| 3016   j(zero, &succeed); | 3015   j(zero, &succeed); | 
| 3017   cmpb(operand, static_cast<uint8_t>(SYMBOL_TYPE)); | 3016   cmpb(operand, Immediate(SYMBOL_TYPE)); | 
| 3018   j(not_equal, not_unique_name, distance); | 3017   j(not_equal, not_unique_name, distance); | 
| 3019 | 3018 | 
| 3020   bind(&succeed); | 3019   bind(&succeed); | 
| 3021 } | 3020 } | 
| 3022 | 3021 | 
| 3023 | 3022 | 
| 3024 void MacroAssembler::EmitSeqStringSetCharCheck(Register string, | 3023 void MacroAssembler::EmitSeqStringSetCharCheck(Register string, | 
| 3025                                                Register index, | 3024                                                Register index, | 
| 3026                                                Register value, | 3025                                                Register value, | 
| 3027                                                uint32_t encoding_mask) { | 3026                                                uint32_t encoding_mask) { | 
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3155     Label* condition_met, | 3154     Label* condition_met, | 
| 3156     Label::Distance condition_met_distance) { | 3155     Label::Distance condition_met_distance) { | 
| 3157   DCHECK(cc == zero || cc == not_zero); | 3156   DCHECK(cc == zero || cc == not_zero); | 
| 3158   if (scratch.is(object)) { | 3157   if (scratch.is(object)) { | 
| 3159     and_(scratch, Immediate(~Page::kPageAlignmentMask)); | 3158     and_(scratch, Immediate(~Page::kPageAlignmentMask)); | 
| 3160   } else { | 3159   } else { | 
| 3161     mov(scratch, Immediate(~Page::kPageAlignmentMask)); | 3160     mov(scratch, Immediate(~Page::kPageAlignmentMask)); | 
| 3162     and_(scratch, object); | 3161     and_(scratch, object); | 
| 3163   } | 3162   } | 
| 3164   if (mask < (1 << kBitsPerByte)) { | 3163   if (mask < (1 << kBitsPerByte)) { | 
| 3165     test_b(Operand(scratch, MemoryChunk::kFlagsOffset), | 3164     test_b(Operand(scratch, MemoryChunk::kFlagsOffset), Immediate(mask)); | 
| 3166            static_cast<uint8_t>(mask)); |  | 
| 3167   } else { | 3165   } else { | 
| 3168     test(Operand(scratch, MemoryChunk::kFlagsOffset), Immediate(mask)); | 3166     test(Operand(scratch, MemoryChunk::kFlagsOffset), Immediate(mask)); | 
| 3169   } | 3167   } | 
| 3170   j(cc, condition_met, condition_met_distance); | 3168   j(cc, condition_met, condition_met_distance); | 
| 3171 } | 3169 } | 
| 3172 | 3170 | 
| 3173 | 3171 | 
| 3174 void MacroAssembler::CheckPageFlagForMap( | 3172 void MacroAssembler::CheckPageFlagForMap( | 
| 3175     Handle<Map> map, | 3173     Handle<Map> map, | 
| 3176     int mask, | 3174     int mask, | 
| 3177     Condition cc, | 3175     Condition cc, | 
| 3178     Label* condition_met, | 3176     Label* condition_met, | 
| 3179     Label::Distance condition_met_distance) { | 3177     Label::Distance condition_met_distance) { | 
| 3180   DCHECK(cc == zero || cc == not_zero); | 3178   DCHECK(cc == zero || cc == not_zero); | 
| 3181   Page* page = Page::FromAddress(map->address()); | 3179   Page* page = Page::FromAddress(map->address()); | 
| 3182   DCHECK(!serializer_enabled());  // Serializer cannot match page_flags. | 3180   DCHECK(!serializer_enabled());  // Serializer cannot match page_flags. | 
| 3183   ExternalReference reference(ExternalReference::page_flags(page)); | 3181   ExternalReference reference(ExternalReference::page_flags(page)); | 
| 3184   // The inlined static address check of the page's flags relies | 3182   // The inlined static address check of the page's flags relies | 
| 3185   // on maps never being compacted. | 3183   // on maps never being compacted. | 
| 3186   DCHECK(!isolate()->heap()->mark_compact_collector()-> | 3184   DCHECK(!isolate()->heap()->mark_compact_collector()-> | 
| 3187          IsOnEvacuationCandidate(*map)); | 3185          IsOnEvacuationCandidate(*map)); | 
| 3188   if (mask < (1 << kBitsPerByte)) { | 3186   if (mask < (1 << kBitsPerByte)) { | 
| 3189     test_b(Operand::StaticVariable(reference), static_cast<uint8_t>(mask)); | 3187     test_b(Operand::StaticVariable(reference), Immediate(mask)); | 
| 3190   } else { | 3188   } else { | 
| 3191     test(Operand::StaticVariable(reference), Immediate(mask)); | 3189     test(Operand::StaticVariable(reference), Immediate(mask)); | 
| 3192   } | 3190   } | 
| 3193   j(cc, condition_met, condition_met_distance); | 3191   j(cc, condition_met, condition_met_distance); | 
| 3194 } | 3192 } | 
| 3195 | 3193 | 
| 3196 | 3194 | 
| 3197 void MacroAssembler::JumpIfBlack(Register object, | 3195 void MacroAssembler::JumpIfBlack(Register object, | 
| 3198                                  Register scratch0, | 3196                                  Register scratch0, | 
| 3199                                  Register scratch1, | 3197                                  Register scratch1, | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 3219   Label other_color, word_boundary; | 3217   Label other_color, word_boundary; | 
| 3220   test(mask_scratch, Operand(bitmap_scratch, MemoryChunk::kHeaderSize)); | 3218   test(mask_scratch, Operand(bitmap_scratch, MemoryChunk::kHeaderSize)); | 
| 3221   j(first_bit == 1 ? zero : not_zero, &other_color, Label::kNear); | 3219   j(first_bit == 1 ? zero : not_zero, &other_color, Label::kNear); | 
| 3222   add(mask_scratch, mask_scratch);  // Shift left 1 by adding. | 3220   add(mask_scratch, mask_scratch);  // Shift left 1 by adding. | 
| 3223   j(zero, &word_boundary, Label::kNear); | 3221   j(zero, &word_boundary, Label::kNear); | 
| 3224   test(mask_scratch, Operand(bitmap_scratch, MemoryChunk::kHeaderSize)); | 3222   test(mask_scratch, Operand(bitmap_scratch, MemoryChunk::kHeaderSize)); | 
| 3225   j(second_bit == 1 ? not_zero : zero, has_color, has_color_distance); | 3223   j(second_bit == 1 ? not_zero : zero, has_color, has_color_distance); | 
| 3226   jmp(&other_color, Label::kNear); | 3224   jmp(&other_color, Label::kNear); | 
| 3227 | 3225 | 
| 3228   bind(&word_boundary); | 3226   bind(&word_boundary); | 
| 3229   test_b(Operand(bitmap_scratch, MemoryChunk::kHeaderSize + kPointerSize), 1); | 3227   test_b(Operand(bitmap_scratch, MemoryChunk::kHeaderSize + kPointerSize), | 
|  | 3228          Immediate(1)); | 
| 3230 | 3229 | 
| 3231   j(second_bit == 1 ? not_zero : zero, has_color, has_color_distance); | 3230   j(second_bit == 1 ? not_zero : zero, has_color, has_color_distance); | 
| 3232   bind(&other_color); | 3231   bind(&other_color); | 
| 3233 } | 3232 } | 
| 3234 | 3233 | 
| 3235 | 3234 | 
| 3236 void MacroAssembler::GetMarkBits(Register addr_reg, | 3235 void MacroAssembler::GetMarkBits(Register addr_reg, | 
| 3237                                  Register bitmap_reg, | 3236                                  Register bitmap_reg, | 
| 3238                                  Register mask_reg) { | 3237                                  Register mask_reg) { | 
| 3239   DCHECK(!AreAliased(addr_reg, mask_reg, bitmap_reg, ecx)); | 3238   DCHECK(!AreAliased(addr_reg, mask_reg, bitmap_reg, ecx)); | 
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3394   mov(eax, dividend); | 3393   mov(eax, dividend); | 
| 3395   shr(eax, 31); | 3394   shr(eax, 31); | 
| 3396   add(edx, eax); | 3395   add(edx, eax); | 
| 3397 } | 3396 } | 
| 3398 | 3397 | 
| 3399 | 3398 | 
| 3400 }  // namespace internal | 3399 }  // namespace internal | 
| 3401 }  // namespace v8 | 3400 }  // namespace v8 | 
| 3402 | 3401 | 
| 3403 #endif  // V8_TARGET_ARCH_IA32 | 3402 #endif  // V8_TARGET_ARCH_IA32 | 
| OLD | NEW | 
|---|