| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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_ARM64 | 5 #if V8_TARGET_ARCH_ARM64 |
| 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 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 | 202 |
| 203 // Mov instructions can't move immediate values into the stack pointer, so | 203 // Mov instructions can't move immediate values into the stack pointer, so |
| 204 // set up a temporary register, if needed. | 204 // set up a temporary register, if needed. |
| 205 UseScratchRegisterScope temps(this); | 205 UseScratchRegisterScope temps(this); |
| 206 Register temp = rd.IsSP() ? temps.AcquireSameSizeAs(rd) : rd; | 206 Register temp = rd.IsSP() ? temps.AcquireSameSizeAs(rd) : rd; |
| 207 | 207 |
| 208 // Iterate through the halfwords. Use movn/movz for the first non-ignored | 208 // Iterate through the halfwords. Use movn/movz for the first non-ignored |
| 209 // halfword, and movk for subsequent halfwords. | 209 // halfword, and movk for subsequent halfwords. |
| 210 DCHECK((reg_size % 16) == 0); | 210 DCHECK((reg_size % 16) == 0); |
| 211 bool first_mov_done = false; | 211 bool first_mov_done = false; |
| 212 for (unsigned i = 0; i < (rd.SizeInBits() / 16); i++) { | 212 for (int i = 0; i < (rd.SizeInBits() / 16); i++) { |
| 213 uint64_t imm16 = (imm >> (16 * i)) & 0xffffL; | 213 uint64_t imm16 = (imm >> (16 * i)) & 0xffffL; |
| 214 if (imm16 != ignored_halfword) { | 214 if (imm16 != ignored_halfword) { |
| 215 if (!first_mov_done) { | 215 if (!first_mov_done) { |
| 216 if (invert_move) { | 216 if (invert_move) { |
| 217 movn(temp, (~imm16) & 0xffffL, 16 * i); | 217 movn(temp, (~imm16) & 0xffffL, 16 * i); |
| 218 } else { | 218 } else { |
| 219 movz(temp, imm16, 16 * i); | 219 movz(temp, imm16, 16 * i); |
| 220 } | 220 } |
| 221 first_mov_done = true; | 221 first_mov_done = true; |
| 222 } else { | 222 } else { |
| (...skipping 4841 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5064 } | 5064 } |
| 5065 | 5065 |
| 5066 | 5066 |
| 5067 #undef __ | 5067 #undef __ |
| 5068 | 5068 |
| 5069 | 5069 |
| 5070 } // namespace internal | 5070 } // namespace internal |
| 5071 } // namespace v8 | 5071 } // namespace v8 |
| 5072 | 5072 |
| 5073 #endif // V8_TARGET_ARCH_ARM64 | 5073 #endif // V8_TARGET_ARCH_ARM64 |
| OLD | NEW |