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 #include <limits.h> // For LONG_MIN, LONG_MAX. | 5 #include <limits.h> // For LONG_MIN, LONG_MAX. |
6 | 6 |
7 #if V8_TARGET_ARCH_ARM | 7 #if V8_TARGET_ARCH_ARM |
8 | 8 |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/base/division-by-constant.h" | 10 #include "src/base/division-by-constant.h" |
(...skipping 2054 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2065 int shift = 0; | 2065 int shift = 0; |
2066 while (object_size != 0) { | 2066 while (object_size != 0) { |
2067 if (((object_size >> shift) & 0x03) == 0) { | 2067 if (((object_size >> shift) & 0x03) == 0) { |
2068 shift += 2; | 2068 shift += 2; |
2069 } else { | 2069 } else { |
2070 int bits = object_size & (0xff << shift); | 2070 int bits = object_size & (0xff << shift); |
2071 object_size -= bits; | 2071 object_size -= bits; |
2072 shift += 8; | 2072 shift += 8; |
2073 Operand bits_operand(bits); | 2073 Operand bits_operand(bits); |
2074 DCHECK(bits_operand.instructions_required(this) == 1); | 2074 DCHECK(bits_operand.instructions_required(this) == 1); |
2075 add(result_end, source, bits_operand, SetCC, cond); | 2075 add(result_end, source, bits_operand, LeaveCC, cond); |
2076 source = result_end; | 2076 source = result_end; |
2077 cond = cc; | 2077 cond = cc; |
2078 } | 2078 } |
2079 } | 2079 } |
2080 b(cs, gc_required); | |
2081 cmp(result_end, Operand(alloc_limit)); | 2080 cmp(result_end, Operand(alloc_limit)); |
2082 b(hi, gc_required); | 2081 b(hi, gc_required); |
2083 str(result_end, MemOperand(top_address)); | 2082 str(result_end, MemOperand(top_address)); |
2084 | 2083 |
2085 // Tag object if requested. | 2084 // Tag object if requested. |
2086 if ((flags & TAG_OBJECT) != 0) { | 2085 if ((flags & TAG_OBJECT) != 0) { |
2087 add(result, result, Operand(kHeapObjectTag)); | 2086 add(result, result, Operand(kHeapObjectTag)); |
2088 } | 2087 } |
2089 } | 2088 } |
2090 | 2089 |
(...skipping 1855 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3946 } | 3945 } |
3947 } | 3946 } |
3948 if (mag.shift > 0) mov(result, Operand(result, ASR, mag.shift)); | 3947 if (mag.shift > 0) mov(result, Operand(result, ASR, mag.shift)); |
3949 add(result, result, Operand(dividend, LSR, 31)); | 3948 add(result, result, Operand(dividend, LSR, 31)); |
3950 } | 3949 } |
3951 | 3950 |
3952 } // namespace internal | 3951 } // namespace internal |
3953 } // namespace v8 | 3952 } // namespace v8 |
3954 | 3953 |
3955 #endif // V8_TARGET_ARCH_ARM | 3954 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |