author | Heiher <r@hev.cc> |
Thu, 21 Jul 2016 09:23:57 +0800 | |
changeset 305974 | 301e457cab3f3c6081b55200b13c9bd80657c866 |
parent 305973 | 596b6c9838ec1661d73e7820555b44a58faf2091 |
child 305975 | fdefc01b91dfb9e227522f5319f312b4309ed6f9 |
push id | 30474 |
push user | cbook@mozilla.com |
push date | Thu, 21 Jul 2016 14:25:10 +0000 |
treeherder | mozilla-central@6b180266ac16 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | bbouvier |
bugs | 1287349 |
milestone | 50.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
js/src/jit/mips64/CodeGenerator-mips64.cpp | file | annotate | diff | comparison | revisions | |
js/src/jit/mips64/CodeGenerator-mips64.h | file | annotate | diff | comparison | revisions |
--- a/js/src/jit/mips64/CodeGenerator-mips64.cpp +++ b/js/src/jit/mips64/CodeGenerator-mips64.cpp @@ -299,16 +299,45 @@ CodeGeneratorMIPS64::visitCompareBitwise MOZ_ASSERT(mir->jsop() == JSOP_EQ || mir->jsop() == JSOP_STRICTEQ || mir->jsop() == JSOP_NE || mir->jsop() == JSOP_STRICTNE); emitBranch(lhs.valueReg(), rhs.valueReg(), cond, lir->ifTrue(), lir->ifFalse()); } void +CodeGeneratorMIPS64::visitWasmLoadI64(LWasmLoadI64* lir) +{ + const MWasmLoad* mir = lir->mir(); + + MOZ_ASSERT(lir->mir()->type() == MIRType::Int64); + MOZ_ASSERT(!mir->barrierBefore() && !mir->barrierAfter(), "atomics NYI"); + + uint32_t offset = mir->offset(); + if (offset > INT32_MAX) { + // This is unreachable because of bounds checks. + masm.breakpoint(); + return; + } + + Register ptr = ToRegister(lir->ptr()); + + // Maybe add the offset. + if (offset) { + Register ptrPlusOffset = ToRegister(lir->ptrCopy()); + masm.addPtr(Imm32(offset), ptrPlusOffset); + ptr = ptrPlusOffset; + } else { + MOZ_ASSERT(lir->ptrCopy()->isBogusTemp()); + } + + masm.ma_load(ToRegister(lir->output()), BaseIndex(HeapReg, ptr, TimesOne), SizeDouble); +} + +void CodeGeneratorMIPS64::visitAsmSelectI64(LAsmSelectI64* lir) { MOZ_ASSERT(lir->mir()->type() == MIRType::Int64); Register cond = ToRegister(lir->condExpr()); const LAllocation* falseExpr = lir->falseExpr(); Register out = ToRegister(lir->output());
--- a/js/src/jit/mips64/CodeGenerator-mips64.h +++ b/js/src/jit/mips64/CodeGenerator-mips64.h @@ -39,16 +39,17 @@ class CodeGeneratorMIPS64 : public CodeG void emitTableSwitchDispatch(MTableSwitch* mir, Register index, Register base); public: void visitCompareB(LCompareB* lir); void visitCompareBAndBranch(LCompareBAndBranch* lir); void visitCompareBitwise(LCompareBitwise* lir); void visitCompareBitwiseAndBranch(LCompareBitwiseAndBranch* lir); + void visitWasmLoadI64(LWasmLoadI64* lir); void visitAsmSelectI64(LAsmSelectI64* ins); void visitAsmReinterpretFromI64(LAsmReinterpretFromI64* lir); void visitAsmReinterpretToI64(LAsmReinterpretToI64* lir); // Out of line visitors. void visitOutOfLineBailout(OutOfLineBailout* ool); void visitOutOfLineTableSwitch(OutOfLineTableSwitch* ool); protected: