| 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);
|
| + }
|
| }
|
| }
|
|
|
|
|