OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 3009 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3020 | 3020 |
3021 // Value is white. We check whether it is data that doesn't need scanning. | 3021 // Value is white. We check whether it is data that doesn't need scanning. |
3022 // Currently only checks for HeapNumber and non-cons strings. | 3022 // Currently only checks for HeapNumber and non-cons strings. |
3023 Register map = ecx; // Holds map while checking type. | 3023 Register map = ecx; // Holds map while checking type. |
3024 Register length = ecx; // Holds length of object after checking type. | 3024 Register length = ecx; // Holds length of object after checking type. |
3025 Label not_heap_number; | 3025 Label not_heap_number; |
3026 Label is_data_object; | 3026 Label is_data_object; |
3027 | 3027 |
3028 // Check for heap-number | 3028 // Check for heap-number |
3029 mov(map, FieldOperand(value, HeapObject::kMapOffset)); | 3029 mov(map, FieldOperand(value, HeapObject::kMapOffset)); |
3030 cmp(map, FACTORY->heap_number_map()); | 3030 cmp(map, isolate()->factory()->heap_number_map()); |
3031 j(not_equal, ¬_heap_number, Label::kNear); | 3031 j(not_equal, ¬_heap_number, Label::kNear); |
3032 mov(length, Immediate(HeapNumber::kSize)); | 3032 mov(length, Immediate(HeapNumber::kSize)); |
3033 jmp(&is_data_object, Label::kNear); | 3033 jmp(&is_data_object, Label::kNear); |
3034 | 3034 |
3035 bind(¬_heap_number); | 3035 bind(¬_heap_number); |
3036 // Check for strings. | 3036 // Check for strings. |
3037 ASSERT(kIsIndirectStringTag == 1 && kIsIndirectStringMask == 1); | 3037 ASSERT(kIsIndirectStringTag == 1 && kIsIndirectStringMask == 1); |
3038 ASSERT(kNotStringTag == 0x80 && kIsNotStringMask == 0x80); | 3038 ASSERT(kNotStringTag == 0x80 && kIsNotStringMask == 0x80); |
3039 // If it's a string and it's not a cons string then it's an object containing | 3039 // If it's a string and it's not a cons string then it's an object containing |
3040 // no GC pointers. | 3040 // no GC pointers. |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3151 j(greater, &no_info_available); | 3151 j(greater, &no_info_available); |
3152 cmp(MemOperand(scratch_reg, -AllocationSiteInfo::kSize), | 3152 cmp(MemOperand(scratch_reg, -AllocationSiteInfo::kSize), |
3153 Immediate(Handle<Map>(isolate()->heap()->allocation_site_info_map()))); | 3153 Immediate(Handle<Map>(isolate()->heap()->allocation_site_info_map()))); |
3154 bind(&no_info_available); | 3154 bind(&no_info_available); |
3155 } | 3155 } |
3156 | 3156 |
3157 | 3157 |
3158 } } // namespace v8::internal | 3158 } } // namespace v8::internal |
3159 | 3159 |
3160 #endif // V8_TARGET_ARCH_IA32 | 3160 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |