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

Side by Side Diff: runtime/vm/assembler_arm64.cc

Issue 2628043006: Fix simarm64 bugs on Windows. (Closed)
Patch Set: address comments Created 3 years, 11 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
« no previous file with comments | « no previous file | runtime/vm/constants_arm64.h » ('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 (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/globals.h" // NOLINT 5 #include "vm/globals.h" // NOLINT
6 #if defined(TARGET_ARCH_ARM64) 6 #if defined(TARGET_ARCH_ARM64)
7 7
8 #include "vm/assembler.h" 8 #include "vm/assembler.h"
9 #include "vm/cpu.h" 9 #include "vm/cpu.h"
10 #include "vm/longjump.h" 10 #include "vm/longjump.h"
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 int count = 0; 174 int count = 0;
175 do { 175 do {
176 count++; 176 count++;
177 } while (value >>= 1); 177 } while (value >>= 1);
178 return width - count; 178 return width - count;
179 } 179 }
180 180
181 181
182 static int CountOneBits(uint64_t value, int width) { 182 static int CountOneBits(uint64_t value, int width) {
183 // Mask out unused bits to ensure that they are not counted. 183 // Mask out unused bits to ensure that they are not counted.
184 value &= (0xffffffffffffffffUL >> (64 - width)); 184 value &= (0xffffffffffffffffULL >> (64 - width));
185 185
186 value = ((value >> 1) & 0x5555555555555555) + (value & 0x5555555555555555); 186 value = ((value >> 1) & 0x5555555555555555) + (value & 0x5555555555555555);
187 value = ((value >> 2) & 0x3333333333333333) + (value & 0x3333333333333333); 187 value = ((value >> 2) & 0x3333333333333333) + (value & 0x3333333333333333);
188 value = ((value >> 4) & 0x0f0f0f0f0f0f0f0f) + (value & 0x0f0f0f0f0f0f0f0f); 188 value = ((value >> 4) & 0x0f0f0f0f0f0f0f0f) + (value & 0x0f0f0f0f0f0f0f0f);
189 value = ((value >> 8) & 0x00ff00ff00ff00ff) + (value & 0x00ff00ff00ff00ff); 189 value = ((value >> 8) & 0x00ff00ff00ff00ff) + (value & 0x00ff00ff00ff00ff);
190 value = ((value >> 16) & 0x0000ffff0000ffff) + (value & 0x0000ffff0000ffff); 190 value = ((value >> 16) & 0x0000ffff0000ffff) + (value & 0x0000ffff0000ffff);
191 value = ((value >> 32) & 0x00000000ffffffff) + (value & 0x00000000ffffffff); 191 value = ((value >> 32) & 0x00000000ffffffff) + (value & 0x00000000ffffffff);
192 192
193 return value; 193 return value;
194 } 194 }
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 // 4. If the sum of leading ones, trailing ones and unset bits in the 275 // 4. If the sum of leading ones, trailing ones and unset bits in the
276 // value is equal to the bit width of the value, it can be encoded. 276 // value is equal to the bit width of the value, it can be encoded.
277 if (lead_one + trail_one + (width - set_bits) == width) { 277 if (lead_one + trail_one + (width - set_bits) == width) {
278 *imm_op = Operand(n, imm_s, imm_r); 278 *imm_op = Operand(n, imm_s, imm_r);
279 return true; 279 return true;
280 } 280 }
281 281
282 // 5. If the most-significant half of the bitwise value is equal to the 282 // 5. If the most-significant half of the bitwise value is equal to the
283 // least-significant half, return to step 2 using the least-significant 283 // least-significant half, return to step 2 using the least-significant
284 // half of the value. 284 // half of the value.
285 uint64_t mask = (1UL << (width >> 1)) - 1; 285 uint64_t mask = (1ULL << (width >> 1)) - 1;
286 if ((value & mask) == ((value >> (width >> 1)) & mask)) { 286 if ((value & mask) == ((value >> (width >> 1)) & mask)) {
287 width >>= 1; 287 width >>= 1;
288 set_bits >>= 1; 288 set_bits >>= 1;
289 imm_s_fixed >>= 1; 289 imm_s_fixed >>= 1;
290 continue; 290 continue;
291 } 291 }
292 292
293 // 6. Otherwise, the value can't be encoded. 293 // 6. Otherwise, the value can't be encoded.
294 return false; 294 return false;
295 } 295 }
(...skipping 1275 matching lines...) Expand 10 before | Expand all | Expand 10 after
1571 str(tmp, Address(addr, 7), kUnsignedByte); 1571 str(tmp, Address(addr, 7), kUnsignedByte);
1572 if (sz == kDoubleWord) { 1572 if (sz == kDoubleWord) {
1573 return; 1573 return;
1574 } 1574 }
1575 UNIMPLEMENTED(); 1575 UNIMPLEMENTED();
1576 } 1576 }
1577 1577
1578 } // namespace dart 1578 } // namespace dart
1579 1579
1580 #endif // defined TARGET_ARCH_ARM64 1580 #endif // defined TARGET_ARCH_ARM64
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/constants_arm64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698