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

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

Issue 1947263006: Version 5.1.281.30 (cherry-pick) (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@5.1
Patch Set: Created 4 years, 7 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/s390/macro-assembler-s390.h ('k') | no next file » | 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_S390 8 #if V8_TARGET_ARCH_S390
9 9
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 1911 matching lines...) Expand 10 before | Expand all | Expand 10 after
1922 } 1922 }
1923 1923
1924 void MacroAssembler::AllocateTwoByteString(Register result, Register length, 1924 void MacroAssembler::AllocateTwoByteString(Register result, Register length,
1925 Register scratch1, Register scratch2, 1925 Register scratch1, Register scratch2,
1926 Register scratch3, 1926 Register scratch3,
1927 Label* gc_required) { 1927 Label* gc_required) {
1928 // Calculate the number of bytes needed for the characters in the string while 1928 // Calculate the number of bytes needed for the characters in the string while
1929 // observing object alignment. 1929 // observing object alignment.
1930 DCHECK((SeqTwoByteString::kHeaderSize & kObjectAlignmentMask) == 0); 1930 DCHECK((SeqTwoByteString::kHeaderSize & kObjectAlignmentMask) == 0);
1931 1931
1932 ShiftLeft(scratch1, length, Operand(1)); // Length in bytes, not chars. 1932 ShiftLeftP(scratch1, length, Operand(1)); // Length in bytes, not chars.
1933 AddP(scratch1, Operand(kObjectAlignmentMask + SeqTwoByteString::kHeaderSize)); 1933 AddP(scratch1, Operand(kObjectAlignmentMask + SeqTwoByteString::kHeaderSize));
1934 1934
1935 AndP(scratch1, Operand(~kObjectAlignmentMask)); 1935 AndP(scratch1, Operand(~kObjectAlignmentMask));
1936 1936
1937 // Allocate two-byte string in new space. 1937 // Allocate two-byte string in new space.
1938 Allocate(scratch1, result, scratch2, scratch3, gc_required, TAG_OBJECT); 1938 Allocate(scratch1, result, scratch2, scratch3, gc_required, TAG_OBJECT);
1939 1939
1940 // Set the map, length and hash field. 1940 // Set the map, length and hash field.
1941 InitializeNewString(result, length, Heap::kStringMapRootIndex, scratch1, 1941 InitializeNewString(result, length, Heap::kStringMapRootIndex, scratch1,
1942 scratch2); 1942 scratch2);
(...skipping 2939 matching lines...) Expand 10 before | Expand all | Expand 10 after
4882 const MemOperand& mem) { 4882 const MemOperand& mem) {
4883 if (is_uint12(mem.offset())) { 4883 if (is_uint12(mem.offset())) {
4884 stm(src1, src2, mem); 4884 stm(src1, src2, mem);
4885 } else { 4885 } else {
4886 DCHECK(is_int20(mem.offset())); 4886 DCHECK(is_int20(mem.offset()));
4887 stmy(src1, src2, mem); 4887 stmy(src1, src2, mem);
4888 } 4888 }
4889 } 4889 }
4890 4890
4891 // Load 32-bits and sign extend if necessary. 4891 // Load 32-bits and sign extend if necessary.
4892 void MacroAssembler::LoadW(Register dst, Register src) {
4893 #if V8_TARGET_ARCH_S390X
4894 lgfr(dst, src);
4895 #else
4896 if (!dst.is(src)) lr(dst, src);
4897 #endif
4898 }
4899
4900 // Load 32-bits and sign extend if necessary.
4892 void MacroAssembler::LoadW(Register dst, const MemOperand& mem, 4901 void MacroAssembler::LoadW(Register dst, const MemOperand& mem,
4893 Register scratch) { 4902 Register scratch) {
4894 int offset = mem.offset(); 4903 int offset = mem.offset();
4895 4904
4896 if (!is_int20(offset)) { 4905 if (!is_int20(offset)) {
4897 DCHECK(!scratch.is(no_reg)); 4906 DCHECK(!scratch.is(no_reg));
4898 LoadIntLiteral(scratch, offset); 4907 LoadIntLiteral(scratch, offset);
4899 #if V8_TARGET_ARCH_S390X 4908 #if V8_TARGET_ARCH_S390X
4900 lgf(dst, MemOperand(mem.rb(), scratch)); 4909 lgf(dst, MemOperand(mem.rb(), scratch));
4901 #else 4910 #else
4902 l(dst, MemOperand(mem.rb(), scratch)); 4911 l(dst, MemOperand(mem.rb(), scratch));
4903 #endif 4912 #endif
4904 } else { 4913 } else {
4905 #if V8_TARGET_ARCH_S390X 4914 #if V8_TARGET_ARCH_S390X
4906 lgf(dst, mem); 4915 lgf(dst, mem);
4907 #else 4916 #else
4908 if (is_uint12(offset)) { 4917 if (is_uint12(offset)) {
4909 l(dst, mem); 4918 l(dst, mem);
4910 } else { 4919 } else {
4911 ly(dst, mem); 4920 ly(dst, mem);
4912 } 4921 }
4913 #endif 4922 #endif
4914 } 4923 }
4915 } 4924 }
4916 4925
4926 // Load 32-bits and zero extend if necessary.
4927 void MacroAssembler::LoadlW(Register dst, Register src) {
4928 #if V8_TARGET_ARCH_S390X
4929 llgfr(dst, src);
4930 #else
4931 if (!dst.is(src)) lr(dst, src);
4932 #endif
4933 }
4934
4917 // Variable length depending on whether offset fits into immediate field 4935 // Variable length depending on whether offset fits into immediate field
4918 // MemOperand of RX or RXY format 4936 // MemOperand of RX or RXY format
4919 void MacroAssembler::LoadlW(Register dst, const MemOperand& mem, 4937 void MacroAssembler::LoadlW(Register dst, const MemOperand& mem,
4920 Register scratch) { 4938 Register scratch) {
4921 Register base = mem.rb(); 4939 Register base = mem.rb();
4922 int offset = mem.offset(); 4940 int offset = mem.offset();
4923 4941
4924 #if V8_TARGET_ARCH_S390X 4942 #if V8_TARGET_ARCH_S390X
4925 if (is_int20(offset)) { 4943 if (is_int20(offset)) {
4926 llgf(dst, mem); 4944 llgf(dst, mem);
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
5404 } 5422 }
5405 if (mag.shift > 0) ShiftRightArith(result, result, Operand(mag.shift)); 5423 if (mag.shift > 0) ShiftRightArith(result, result, Operand(mag.shift));
5406 ExtractBit(r0, dividend, 31); 5424 ExtractBit(r0, dividend, 31);
5407 AddP(result, r0); 5425 AddP(result, r0);
5408 } 5426 }
5409 5427
5410 } // namespace internal 5428 } // namespace internal
5411 } // namespace v8 5429 } // namespace v8
5412 5430
5413 #endif // V8_TARGET_ARCH_S390 5431 #endif // V8_TARGET_ARCH_S390
OLDNEW
« no previous file with comments | « src/s390/macro-assembler-s390.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698