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

Side by Side Diff: src/ppc/macro-assembler-ppc.cc

Issue 2242223002: PPC: Enable unaligned access and clean up the use of UNALIGNED_ACCESSES (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase over master Created 4 years, 4 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 | « src/ppc/constants-ppc.h ('k') | src/regexp/ppc/regexp-macro-assembler-ppc.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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 <assert.h> // For assert 5 #include <assert.h> // For assert
6 #include <limits.h> // For LONG_MIN, LONG_MAX. 6 #include <limits.h> // For LONG_MIN, LONG_MAX.
7 7
8 #if V8_TARGET_ARCH_PPC 8 #if V8_TARGET_ARCH_PPC
9 9
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 3311 matching lines...) Expand 10 before | Expand all | Expand 10 after
3322 3322
3323 ShiftRightImm(scratch, length, Operand(kPointerSizeLog2)); 3323 ShiftRightImm(scratch, length, Operand(kPointerSizeLog2));
3324 cmpi(scratch, Operand::Zero()); 3324 cmpi(scratch, Operand::Zero());
3325 beq(&byte_loop); 3325 beq(&byte_loop);
3326 3326
3327 mtctr(scratch); 3327 mtctr(scratch);
3328 bind(&word_loop); 3328 bind(&word_loop);
3329 LoadP(scratch, MemOperand(src)); 3329 LoadP(scratch, MemOperand(src));
3330 addi(src, src, Operand(kPointerSize)); 3330 addi(src, src, Operand(kPointerSize));
3331 subi(length, length, Operand(kPointerSize)); 3331 subi(length, length, Operand(kPointerSize));
3332 if (CpuFeatures::IsSupported(UNALIGNED_ACCESSES)) { 3332
3333 // currently false for PPC - but possible future opt 3333 StoreP(scratch, MemOperand(dst));
3334 StoreP(scratch, MemOperand(dst)); 3334 addi(dst, dst, Operand(kPointerSize));
3335 addi(dst, dst, Operand(kPointerSize));
3336 } else {
3337 #if V8_TARGET_LITTLE_ENDIAN
3338 stb(scratch, MemOperand(dst, 0));
3339 ShiftRightImm(scratch, scratch, Operand(8));
3340 stb(scratch, MemOperand(dst, 1));
3341 ShiftRightImm(scratch, scratch, Operand(8));
3342 stb(scratch, MemOperand(dst, 2));
3343 ShiftRightImm(scratch, scratch, Operand(8));
3344 stb(scratch, MemOperand(dst, 3));
3345 #if V8_TARGET_ARCH_PPC64
3346 ShiftRightImm(scratch, scratch, Operand(8));
3347 stb(scratch, MemOperand(dst, 4));
3348 ShiftRightImm(scratch, scratch, Operand(8));
3349 stb(scratch, MemOperand(dst, 5));
3350 ShiftRightImm(scratch, scratch, Operand(8));
3351 stb(scratch, MemOperand(dst, 6));
3352 ShiftRightImm(scratch, scratch, Operand(8));
3353 stb(scratch, MemOperand(dst, 7));
3354 #endif
3355 #else
3356 #if V8_TARGET_ARCH_PPC64
3357 stb(scratch, MemOperand(dst, 7));
3358 ShiftRightImm(scratch, scratch, Operand(8));
3359 stb(scratch, MemOperand(dst, 6));
3360 ShiftRightImm(scratch, scratch, Operand(8));
3361 stb(scratch, MemOperand(dst, 5));
3362 ShiftRightImm(scratch, scratch, Operand(8));
3363 stb(scratch, MemOperand(dst, 4));
3364 ShiftRightImm(scratch, scratch, Operand(8));
3365 #endif
3366 stb(scratch, MemOperand(dst, 3));
3367 ShiftRightImm(scratch, scratch, Operand(8));
3368 stb(scratch, MemOperand(dst, 2));
3369 ShiftRightImm(scratch, scratch, Operand(8));
3370 stb(scratch, MemOperand(dst, 1));
3371 ShiftRightImm(scratch, scratch, Operand(8));
3372 stb(scratch, MemOperand(dst, 0));
3373 #endif
3374 addi(dst, dst, Operand(kPointerSize));
3375 }
3376 bdnz(&word_loop); 3335 bdnz(&word_loop);
3377 3336
3378 // Copy the last bytes if any left. 3337 // Copy the last bytes if any left.
3379 cmpi(length, Operand::Zero()); 3338 cmpi(length, Operand::Zero());
3380 beq(&done); 3339 beq(&done);
3381 3340
3382 bind(&byte_loop); 3341 bind(&byte_loop);
3383 mtctr(length); 3342 mtctr(length);
3384 bind(&byte_loop_1); 3343 bind(&byte_loop_1);
3385 lbz(scratch, MemOperand(src)); 3344 lbz(scratch, MemOperand(src));
(...skipping 1532 matching lines...) Expand 10 before | Expand all | Expand 10 after
4918 } 4877 }
4919 if (mag.shift > 0) srawi(result, result, mag.shift); 4878 if (mag.shift > 0) srawi(result, result, mag.shift);
4920 ExtractBit(r0, dividend, 31); 4879 ExtractBit(r0, dividend, 31);
4921 add(result, result, r0); 4880 add(result, result, r0);
4922 } 4881 }
4923 4882
4924 } // namespace internal 4883 } // namespace internal
4925 } // namespace v8 4884 } // namespace v8
4926 4885
4927 #endif // V8_TARGET_ARCH_PPC 4886 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « src/ppc/constants-ppc.h ('k') | src/regexp/ppc/regexp-macro-assembler-ppc.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698