Index: src/mips/macro-assembler-mips.cc |
diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc |
index 77c02e734270c951f1efa152b89924905320cd48..1187c41d29d73baa902eef107dbb18f46c607824 100644 |
--- a/src/mips/macro-assembler-mips.cc |
+++ b/src/mips/macro-assembler-mips.cc |
@@ -3313,13 +3313,24 @@ void MacroAssembler::CopyBytes(Register src, |
// TODO(kalmard) check if this can be optimized to use sw in most cases. |
// Can't use unaligned access - copy byte by byte. |
- sb(scratch, MemOperand(dst, 0)); |
- srl(scratch, scratch, 8); |
- sb(scratch, MemOperand(dst, 1)); |
- srl(scratch, scratch, 8); |
- sb(scratch, MemOperand(dst, 2)); |
- srl(scratch, scratch, 8); |
- sb(scratch, MemOperand(dst, 3)); |
+ if (kArchEndian == kLittle) { |
+ sb(scratch, MemOperand(dst, 0)); |
+ srl(scratch, scratch, 8); |
+ sb(scratch, MemOperand(dst, 1)); |
+ srl(scratch, scratch, 8); |
+ sb(scratch, MemOperand(dst, 2)); |
+ srl(scratch, scratch, 8); |
+ sb(scratch, MemOperand(dst, 3)); |
+ } else { |
+ sb(scratch, MemOperand(dst, 3)); |
+ srl(scratch, scratch, 8); |
+ sb(scratch, MemOperand(dst, 2)); |
+ srl(scratch, scratch, 8); |
+ sb(scratch, MemOperand(dst, 1)); |
+ srl(scratch, scratch, 8); |
+ sb(scratch, MemOperand(dst, 0)); |
+ } |
+ |
Addu(dst, dst, 4); |
Subu(length, length, Operand(kPointerSize)); |
@@ -3424,11 +3435,12 @@ void MacroAssembler::StoreNumberToDoubleElements(Register value_reg, |
bind(&have_double_value); |
sll(scratch1, key_reg, kDoubleSizeLog2 - kSmiTagSize); |
Addu(scratch1, scratch1, elements_reg); |
- sw(mantissa_reg, FieldMemOperand( |
- scratch1, FixedDoubleArray::kHeaderSize - elements_offset)); |
- uint32_t offset = FixedDoubleArray::kHeaderSize - elements_offset + |
- sizeof(kHoleNanLower32); |
- sw(exponent_reg, FieldMemOperand(scratch1, offset)); |
+ sw(mantissa_reg, |
+ FieldMemOperand(scratch1, FixedDoubleArray::kHeaderSize - elements_offset |
+ + kHoleNanLower32Offset)); |
+ sw(exponent_reg, |
+ FieldMemOperand(scratch1, FixedDoubleArray::kHeaderSize - elements_offset |
+ + kHoleNanUpper32Offset)); |
jmp(&done); |
bind(&maybe_nan); |
@@ -3526,7 +3538,11 @@ void MacroAssembler::CheckMap(Register obj, |
void MacroAssembler::MovFromFloatResult(DoubleRegister dst) { |
if (IsMipsSoftFloatABI) { |
- Move(dst, v0, v1); |
+ if (kArchEndian == kLittle) { |
+ Move(dst, v0, v1); |
+ } else { |
+ Move(dst, v1, v0); |
+ } |
} else { |
Move(dst, f0); // Reg f0 is o32 ABI FP return value. |
} |
@@ -3535,7 +3551,11 @@ void MacroAssembler::MovFromFloatResult(DoubleRegister dst) { |
void MacroAssembler::MovFromFloatParameter(DoubleRegister dst) { |
if (IsMipsSoftFloatABI) { |
- Move(dst, a0, a1); |
+ if (kArchEndian == kLittle) { |
+ Move(dst, a0, a1); |
+ } else { |
+ Move(dst, a1, a0); |
+ } |
} else { |
Move(dst, f12); // Reg f12 is o32 ABI FP first argument value. |
} |
@@ -3546,7 +3566,11 @@ void MacroAssembler::MovToFloatParameter(DoubleRegister src) { |
if (!IsMipsSoftFloatABI) { |
Move(f12, src); |
} else { |
- Move(a0, a1, src); |
+ if (kArchEndian == kLittle) { |
+ Move(a0, a1, src); |
+ } else { |
+ Move(a1, a0, src); |
+ } |
} |
} |
@@ -3555,7 +3579,11 @@ void MacroAssembler::MovToFloatResult(DoubleRegister src) { |
if (!IsMipsSoftFloatABI) { |
Move(f0, src); |
} else { |
- Move(v0, v1, src); |
+ if (kArchEndian == kLittle) { |
+ Move(v0, v1, src); |
+ } else { |
+ Move(v1, v0, src); |
+ } |
} |
} |
@@ -3572,8 +3600,13 @@ void MacroAssembler::MovToFloatParameters(DoubleRegister src1, |
Move(f14, src2); |
} |
} else { |
- Move(a0, a1, src1); |
- Move(a2, a3, src2); |
+ if (kArchEndian == kLittle) { |
+ Move(a0, a1, src1); |
+ Move(a2, a3, src2); |
+ } else { |
+ Move(a1, a0, src1); |
+ Move(a3, a2, src2); |
+ } |
} |
} |