| OLD | NEW |
| 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 2903 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2914 // Initialize the JSValue. | 2914 // Initialize the JSValue. |
| 2915 LoadGlobalFunctionInitialMap(constructor, scratch1, scratch2); | 2915 LoadGlobalFunctionInitialMap(constructor, scratch1, scratch2); |
| 2916 StoreP(scratch1, FieldMemOperand(result, HeapObject::kMapOffset), r0); | 2916 StoreP(scratch1, FieldMemOperand(result, HeapObject::kMapOffset), r0); |
| 2917 LoadRoot(scratch1, Heap::kEmptyFixedArrayRootIndex); | 2917 LoadRoot(scratch1, Heap::kEmptyFixedArrayRootIndex); |
| 2918 StoreP(scratch1, FieldMemOperand(result, JSObject::kPropertiesOffset), r0); | 2918 StoreP(scratch1, FieldMemOperand(result, JSObject::kPropertiesOffset), r0); |
| 2919 StoreP(scratch1, FieldMemOperand(result, JSObject::kElementsOffset), r0); | 2919 StoreP(scratch1, FieldMemOperand(result, JSObject::kElementsOffset), r0); |
| 2920 StoreP(value, FieldMemOperand(result, JSValue::kValueOffset), r0); | 2920 StoreP(value, FieldMemOperand(result, JSValue::kValueOffset), r0); |
| 2921 STATIC_ASSERT(JSValue::kSize == 4 * kPointerSize); | 2921 STATIC_ASSERT(JSValue::kSize == 4 * kPointerSize); |
| 2922 } | 2922 } |
| 2923 | 2923 |
| 2924 void MacroAssembler::CopyBytes(Register src, Register dst, Register length, | |
| 2925 Register scratch) { | |
| 2926 Label big_loop, left_bytes, done, fake_call; | |
| 2927 | |
| 2928 DCHECK(!scratch.is(r0)); | |
| 2929 | |
| 2930 // big loop moves 256 bytes at a time | |
| 2931 bind(&big_loop); | |
| 2932 CmpP(length, Operand(static_cast<intptr_t>(0x100))); | |
| 2933 blt(&left_bytes); | |
| 2934 | |
| 2935 mvc(MemOperand(dst), MemOperand(src), 0x100); | |
| 2936 | |
| 2937 AddP(src, Operand(static_cast<intptr_t>(0x100))); | |
| 2938 AddP(dst, Operand(static_cast<intptr_t>(0x100))); | |
| 2939 SubP(length, Operand(static_cast<intptr_t>(0x100))); | |
| 2940 b(&big_loop); | |
| 2941 | |
| 2942 bind(&left_bytes); | |
| 2943 CmpP(length, Operand::Zero()); | |
| 2944 beq(&done); | |
| 2945 | |
| 2946 // TODO(john.yan): More optimal version is to use MVC | |
| 2947 // Sequence below has some undiagnosed issue. | |
| 2948 /* | |
| 2949 b(scratch, &fake_call); // use brasl to Save mvc addr to scratch | |
| 2950 mvc(MemOperand(dst), MemOperand(src), 1); | |
| 2951 bind(&fake_call); | |
| 2952 SubP(length, Operand(static_cast<intptr_t>(-1))); | |
| 2953 ex(length, MemOperand(scratch)); // execute mvc instr above | |
| 2954 AddP(src, length); | |
| 2955 AddP(dst, length); | |
| 2956 AddP(src, Operand(static_cast<intptr_t>(0x1))); | |
| 2957 AddP(dst, Operand(static_cast<intptr_t>(0x1))); | |
| 2958 */ | |
| 2959 | |
| 2960 mvc(MemOperand(dst), MemOperand(src), 1); | |
| 2961 AddP(src, Operand(static_cast<intptr_t>(0x1))); | |
| 2962 AddP(dst, Operand(static_cast<intptr_t>(0x1))); | |
| 2963 SubP(length, Operand(static_cast<intptr_t>(0x1))); | |
| 2964 | |
| 2965 b(&left_bytes); | |
| 2966 bind(&done); | |
| 2967 } | |
| 2968 | |
| 2969 void MacroAssembler::InitializeNFieldsWithFiller(Register current_address, | 2924 void MacroAssembler::InitializeNFieldsWithFiller(Register current_address, |
| 2970 Register count, | 2925 Register count, |
| 2971 Register filler) { | 2926 Register filler) { |
| 2972 Label loop; | 2927 Label loop; |
| 2973 bind(&loop); | 2928 bind(&loop); |
| 2974 StoreP(filler, MemOperand(current_address)); | 2929 StoreP(filler, MemOperand(current_address)); |
| 2975 AddP(current_address, current_address, Operand(kPointerSize)); | 2930 AddP(current_address, current_address, Operand(kPointerSize)); |
| 2976 BranchOnCount(r1, &loop); | 2931 BranchOnCount(r1, &loop); |
| 2977 } | 2932 } |
| 2978 | 2933 |
| (...skipping 2453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5432 } | 5387 } |
| 5433 if (mag.shift > 0) ShiftRightArith(result, result, Operand(mag.shift)); | 5388 if (mag.shift > 0) ShiftRightArith(result, result, Operand(mag.shift)); |
| 5434 ExtractBit(r0, dividend, 31); | 5389 ExtractBit(r0, dividend, 31); |
| 5435 AddP(result, r0); | 5390 AddP(result, r0); |
| 5436 } | 5391 } |
| 5437 | 5392 |
| 5438 } // namespace internal | 5393 } // namespace internal |
| 5439 } // namespace v8 | 5394 } // namespace v8 |
| 5440 | 5395 |
| 5441 #endif // V8_TARGET_ARCH_S390 | 5396 #endif // V8_TARGET_ARCH_S390 |
| OLD | NEW |