Lines Matching refs:ins

137   LReturn* ins = new (alloc()) LReturn(isGenerator);  in visitReturnImpl()  local
138 ins->setOperand(0, LUse(JSReturnReg_Type)); in visitReturnImpl()
139 ins->setOperand(1, LUse(JSReturnReg_Data)); in visitReturnImpl()
140 fillBoxUses(ins, 0, opd); in visitReturnImpl()
141 add(ins); in visitReturnImpl()
186 LInstructionHelper<INT64_PIECES, 2 * INT64_PIECES, 0>* ins, in lowerForALUInt64() argument
188 ins->setInt64Operand(0, useInt64RegisterAtStart(lhs)); in lowerForALUInt64()
189 ins->setInt64Operand(INT64_PIECES, useInt64OrConstant(rhs)); in lowerForALUInt64()
190 defineInt64ReuseInput(ins, mir, 0); in lowerForALUInt64()
193 void LIRGeneratorX86::lowerForMulInt64(LMulI64* ins, MMul* mir, in lowerForMulInt64() argument
210 ins->setInt64Operand( in lowerForMulInt64()
212 ins->setInt64Operand(INT64_PIECES, useInt64OrConstant(rhs)); in lowerForMulInt64()
214 ins->setTemp(0, temp()); in lowerForMulInt64()
217 defineInt64Fixed(ins, mir, in lowerForMulInt64()
223 MCompareExchangeTypedArrayElement* ins) { in visitCompareExchangeTypedArrayElement() argument
224 MOZ_ASSERT(ins->elements()->type() == MIRType::Elements); in visitCompareExchangeTypedArrayElement()
225 MOZ_ASSERT(ins->index()->type() == MIRType::IntPtr); in visitCompareExchangeTypedArrayElement()
227 if (Scalar::isBigIntType(ins->arrayType())) { in visitCompareExchangeTypedArrayElement()
228 LUse elements = useFixed(ins->elements(), esi); in visitCompareExchangeTypedArrayElement()
230 useRegisterOrIndexConstant(ins->index(), ins->arrayType()); in visitCompareExchangeTypedArrayElement()
231 LUse oldval = useFixed(ins->oldval(), eax); in visitCompareExchangeTypedArrayElement()
232 LUse newval = useFixed(ins->newval(), edx); in visitCompareExchangeTypedArrayElement()
237 defineFixed(lir, ins, LAllocation(AnyRegister(ecx))); in visitCompareExchangeTypedArrayElement()
238 assignSafepoint(lir, ins); in visitCompareExchangeTypedArrayElement()
242 lowerCompareExchangeTypedArrayElement(ins, /* useI386ByteRegisters = */ true); in visitCompareExchangeTypedArrayElement()
246 MAtomicExchangeTypedArrayElement* ins) { in visitAtomicExchangeTypedArrayElement() argument
247 MOZ_ASSERT(ins->elements()->type() == MIRType::Elements); in visitAtomicExchangeTypedArrayElement()
248 MOZ_ASSERT(ins->index()->type() == MIRType::IntPtr); in visitAtomicExchangeTypedArrayElement()
250 if (Scalar::isBigIntType(ins->arrayType())) { in visitAtomicExchangeTypedArrayElement()
251 LUse elements = useRegister(ins->elements()); in visitAtomicExchangeTypedArrayElement()
253 useRegisterOrIndexConstant(ins->index(), ins->arrayType()); in visitAtomicExchangeTypedArrayElement()
254 LAllocation value = useFixed(ins->value(), edx); in visitAtomicExchangeTypedArrayElement()
259 defineFixed(lir, ins, LAllocation(AnyRegister(eax))); in visitAtomicExchangeTypedArrayElement()
260 assignSafepoint(lir, ins); in visitAtomicExchangeTypedArrayElement()
264 lowerAtomicExchangeTypedArrayElement(ins, /*useI386ByteRegisters=*/true); in visitAtomicExchangeTypedArrayElement()
268 MAtomicTypedArrayElementBinop* ins) { in visitAtomicTypedArrayElementBinop() argument
269 MOZ_ASSERT(ins->elements()->type() == MIRType::Elements); in visitAtomicTypedArrayElementBinop()
270 MOZ_ASSERT(ins->index()->type() == MIRType::IntPtr); in visitAtomicTypedArrayElementBinop()
272 if (Scalar::isBigIntType(ins->arrayType())) { in visitAtomicTypedArrayElementBinop()
273 LUse elements = useRegister(ins->elements()); in visitAtomicTypedArrayElementBinop()
275 useRegisterOrIndexConstant(ins->index(), ins->arrayType()); in visitAtomicTypedArrayElementBinop()
276 LAllocation value = useFixed(ins->value(), edx); in visitAtomicTypedArrayElementBinop()
283 if (ins->isForEffect()) { in visitAtomicTypedArrayElementBinop()
288 add(lir, ins); in visitAtomicTypedArrayElementBinop()
296 defineFixed(lir, ins, LAllocation(AnyRegister(eax))); in visitAtomicTypedArrayElementBinop()
297 assignSafepoint(lir, ins); in visitAtomicTypedArrayElementBinop()
301 lowerAtomicTypedArrayElementBinop(ins, /* useI386ByteRegisters = */ true); in visitAtomicTypedArrayElementBinop()
304 void LIRGeneratorX86::lowerAtomicLoad64(MLoadUnboxedScalar* ins) { in lowerAtomicLoad64() argument
305 const LUse elements = useRegister(ins->elements()); in lowerAtomicLoad64()
307 useRegisterOrIndexConstant(ins->index(), ins->storageType()); in lowerAtomicLoad64()
311 defineFixed(lir, ins, LAllocation(AnyRegister(ecx))); in lowerAtomicLoad64()
312 assignSafepoint(lir, ins); in lowerAtomicLoad64()
315 void LIRGeneratorX86::lowerAtomicStore64(MStoreUnboxedScalar* ins) { in lowerAtomicStore64() argument
316 LUse elements = useRegister(ins->elements()); in lowerAtomicStore64()
318 useRegisterOrIndexConstant(ins->index(), ins->writeType()); in lowerAtomicStore64()
319 LAllocation value = useFixed(ins->value(), edx); in lowerAtomicStore64()
323 add(new (alloc()) LAtomicStore64(elements, index, value, temp1, temp2), ins); in lowerAtomicStore64()
326 void LIRGenerator::visitWasmUnsignedToDouble(MWasmUnsignedToDouble* ins) { in visitWasmUnsignedToDouble() argument
327 MOZ_ASSERT(ins->input()->type() == MIRType::Int32); in visitWasmUnsignedToDouble()
329 LWasmUint32ToDouble(useRegisterAtStart(ins->input()), temp()); in visitWasmUnsignedToDouble()
330 define(lir, ins); in visitWasmUnsignedToDouble()
333 void LIRGenerator::visitWasmUnsignedToFloat32(MWasmUnsignedToFloat32* ins) { in visitWasmUnsignedToFloat32() argument
334 MOZ_ASSERT(ins->input()->type() == MIRType::Int32); in visitWasmUnsignedToFloat32()
336 LWasmUint32ToFloat32(useRegisterAtStart(ins->input()), temp()); in visitWasmUnsignedToFloat32()
337 define(lir, ins); in visitWasmUnsignedToFloat32()
367 void LIRGenerator::visitWasmHeapBase(MWasmHeapBase* ins) { in visitWasmHeapBase() argument
368 auto* lir = new (alloc()) LWasmHeapBase(useRegisterAtStart(ins->tlsPtr())); in visitWasmHeapBase()
369 define(lir, ins); in visitWasmHeapBase()
372 void LIRGenerator::visitWasmLoad(MWasmLoad* ins) { in visitWasmLoad() argument
373 MDefinition* base = ins->base(); in visitWasmLoad()
376 MDefinition* memoryBase = ins->memoryBase(); in visitWasmLoad()
379 if (ins->access().type() == Scalar::Int64 && ins->access().isAtomic()) { in visitWasmLoad()
383 defineInt64Fixed(lir, ins, in visitWasmLoad()
390 if (!base->isConstant() || !OptimizableConstantAccess(base, ins->access())) { in visitWasmLoad()
391 baseAlloc = ins->type() == MIRType::Int64 ? useRegister(base) in visitWasmLoad()
395 if (ins->type() != MIRType::Int64) { in visitWasmLoad()
398 define(lir, ins); in visitWasmLoad()
408 Scalar::Type accessType = ins->access().type(); in visitWasmLoad()
412 defineInt64Fixed(lir, ins, in visitWasmLoad()
418 defineInt64(lir, ins); in visitWasmLoad()
421 void LIRGenerator::visitWasmStore(MWasmStore* ins) { in visitWasmStore() argument
422 MDefinition* base = ins->base(); in visitWasmStore()
425 MDefinition* memoryBase = ins->memoryBase(); in visitWasmStore()
428 if (ins->access().type() == Scalar::Int64 && ins->access().isAtomic()) { in visitWasmStore()
431 useInt64Fixed(ins->value(), Register64(ecx, ebx)), in visitWasmStore()
433 add(lir, ins); in visitWasmStore()
438 if (!base->isConstant() || !OptimizableConstantAccess(base, ins->access())) { in visitWasmStore()
443 switch (ins->access().type()) { in visitWasmStore()
447 valueAlloc = useFixed(ins->value(), eax); in visitWasmStore()
457 valueAlloc = useRegisterAtStart(ins->value()); in visitWasmStore()
461 valueAlloc = useRegisterAtStart(ins->value()); in visitWasmStore()
467 LInt64Allocation valueAlloc = useInt64RegisterAtStart(ins->value()); in visitWasmStore()
470 add(lir, ins); in visitWasmStore()
482 add(lir, ins); in visitWasmStore()
485 void LIRGenerator::visitWasmCompareExchangeHeap(MWasmCompareExchangeHeap* ins) { in visitWasmCompareExchangeHeap() argument
486 MDefinition* base = ins->base(); in visitWasmCompareExchangeHeap()
489 MDefinition* memoryBase = ins->memoryBase(); in visitWasmCompareExchangeHeap()
492 if (ins->access().type() == Scalar::Int64) { in visitWasmCompareExchangeHeap()
495 useInt64FixedAtStart(ins->oldValue(), Register64(edx, eax)), in visitWasmCompareExchangeHeap()
496 useInt64FixedAtStart(ins->newValue(), Register64(ecx, ebx))); in visitWasmCompareExchangeHeap()
497 defineInt64Fixed(lir, ins, in visitWasmCompareExchangeHeap()
503 MOZ_ASSERT(ins->access().type() < Scalar::Float32); in visitWasmCompareExchangeHeap()
505 bool byteArray = byteSize(ins->access().type()) == 1; in visitWasmCompareExchangeHeap()
520 const LAllocation oldval = useRegister(ins->oldValue()); in visitWasmCompareExchangeHeap()
522 byteArray ? useFixed(ins->newValue(), ebx) : useRegister(ins->newValue()); in visitWasmCompareExchangeHeap()
528 defineFixed(lir, ins, LAllocation(AnyRegister(eax))); in visitWasmCompareExchangeHeap()
531 void LIRGenerator::visitWasmAtomicExchangeHeap(MWasmAtomicExchangeHeap* ins) { in visitWasmAtomicExchangeHeap() argument
532 MDefinition* memoryBase = ins->memoryBase(); in visitWasmAtomicExchangeHeap()
535 if (ins->access().type() == Scalar::Int64) { in visitWasmAtomicExchangeHeap()
536 MDefinition* base = ins->base(); in visitWasmAtomicExchangeHeap()
539 useInt64Fixed(ins->value(), Register64(ecx, ebx)), ins->access()); in visitWasmAtomicExchangeHeap()
540 defineInt64Fixed(lir, ins, in visitWasmAtomicExchangeHeap()
546 const LAllocation base = useRegister(ins->base()); in visitWasmAtomicExchangeHeap()
547 const LAllocation value = useRegister(ins->value()); in visitWasmAtomicExchangeHeap()
553 if (byteSize(ins->access().type()) == 1) { in visitWasmAtomicExchangeHeap()
554 defineFixed(lir, ins, LAllocation(AnyRegister(eax))); in visitWasmAtomicExchangeHeap()
556 define(lir, ins); in visitWasmAtomicExchangeHeap()
560 void LIRGenerator::visitWasmAtomicBinopHeap(MWasmAtomicBinopHeap* ins) { in visitWasmAtomicBinopHeap() argument
561 MDefinition* base = ins->base(); in visitWasmAtomicBinopHeap()
564 MDefinition* memoryBase = ins->memoryBase(); in visitWasmAtomicBinopHeap()
567 if (ins->access().type() == Scalar::Int64) { in visitWasmAtomicBinopHeap()
570 useInt64Fixed(ins->value(), Register64(ecx, ebx)), in visitWasmAtomicBinopHeap()
571 ins->access(), ins->operation()); in visitWasmAtomicBinopHeap()
572 defineInt64Fixed(lir, ins, in visitWasmAtomicBinopHeap()
578 MOZ_ASSERT(ins->access().type() < Scalar::Float32); in visitWasmAtomicBinopHeap()
580 bool byteArray = byteSize(ins->access().type()) == 1; in visitWasmAtomicBinopHeap()
587 if (!ins->hasUses()) { in visitWasmAtomicBinopHeap()
589 if (byteArray && !ins->value()->isConstant()) { in visitWasmAtomicBinopHeap()
590 value = useFixed(ins->value(), ebx); in visitWasmAtomicBinopHeap()
592 value = useRegisterOrConstant(ins->value()); in visitWasmAtomicBinopHeap()
599 add(lir, ins); in visitWasmAtomicBinopHeap()
636 bool bitOp = !(ins->operation() == AtomicFetchAddOp || in visitWasmAtomicBinopHeap()
637 ins->operation() == AtomicFetchSubOp); in visitWasmAtomicBinopHeap()
642 value = useFixed(ins->value(), ebx); in visitWasmAtomicBinopHeap()
646 } else if (bitOp || ins->value()->isConstant()) { in visitWasmAtomicBinopHeap()
647 value = useRegisterOrConstant(ins->value()); in visitWasmAtomicBinopHeap()
652 value = useRegisterAtStart(ins->value()); in visitWasmAtomicBinopHeap()
661 defineFixed(lir, ins, LAllocation(AnyRegister(eax))); in visitWasmAtomicBinopHeap()
662 } else if (ins->value()->isConstant()) { in visitWasmAtomicBinopHeap()
663 define(lir, ins); in visitWasmAtomicBinopHeap()
665 defineReuseInput(lir, ins, LWasmAtomicBinopHeap::valueOp); in visitWasmAtomicBinopHeap()
732 void LIRGeneratorX86::lowerBigIntDiv(MBigIntDiv* ins) { in lowerBigIntDiv() argument
734 useRegister(ins->lhs()), useRegister(ins->rhs()), tempFixed(eax), temp()); in lowerBigIntDiv()
735 defineFixed(lir, ins, LAllocation(AnyRegister(edx))); in lowerBigIntDiv()
736 assignSafepoint(lir, ins); in lowerBigIntDiv()
739 void LIRGeneratorX86::lowerBigIntMod(MBigIntMod* ins) { in lowerBigIntMod() argument
741 useRegister(ins->lhs()), useRegister(ins->rhs()), tempFixed(eax), temp()); in lowerBigIntMod()
742 defineFixed(lir, ins, LAllocation(AnyRegister(edx))); in lowerBigIntMod()
743 assignSafepoint(lir, ins); in lowerBigIntMod()
746 void LIRGenerator::visitSubstr(MSubstr* ins) { in visitSubstr() argument
751 LSubstr(useRegister(ins->string()), useRegister(ins->begin()), in visitSubstr()
752 useRegister(ins->length()), temp(), LDefinition::BogusTemp(), in visitSubstr()
754 define(lir, ins); in visitSubstr()
755 assignSafepoint(lir, ins); in visitSubstr()
758 void LIRGenerator::visitWasmTruncateToInt64(MWasmTruncateToInt64* ins) { in visitWasmTruncateToInt64() argument
759 MDefinition* opd = ins->input(); in visitWasmTruncateToInt64()
763 defineInt64(new (alloc()) LWasmTruncateToInt64(useRegister(opd), temp), ins); in visitWasmTruncateToInt64()
767 MWasmBuiltinTruncateToInt64* ins) { in lowerWasmBuiltinTruncateToInt64() argument
771 void LIRGenerator::visitInt64ToFloatingPoint(MInt64ToFloatingPoint* ins) { in visitInt64ToFloatingPoint() argument
772 MDefinition* opd = ins->input(); in visitInt64ToFloatingPoint()
774 MOZ_ASSERT(IsFloatingPointType(ins->type())); in visitInt64ToFloatingPoint()
777 (ins->isUnsigned() && in visitInt64ToFloatingPoint()
778 ((ins->type() == MIRType::Double && AssemblerX86Shared::HasSSE3()) || in visitInt64ToFloatingPoint()
779 ins->type() == MIRType::Float32)) in visitInt64ToFloatingPoint()
784 ins); in visitInt64ToFloatingPoint()
788 MBuiltinInt64ToFloatingPoint* ins) { in lowerBuiltinInt64ToFloatingPoint() argument
792 void LIRGenerator::visitExtendInt32ToInt64(MExtendInt32ToInt64* ins) { in visitExtendInt32ToInt64() argument
793 if (ins->isUnsigned()) { in visitExtendInt32ToInt64()
795 LExtendInt32ToInt64(useRegisterAtStart(ins->input())), in visitExtendInt32ToInt64()
796 ins); in visitExtendInt32ToInt64()
799 new (alloc()) LExtendInt32ToInt64(useFixedAtStart(ins->input(), eax)); in visitExtendInt32ToInt64()
800 defineInt64Fixed(lir, ins, in visitExtendInt32ToInt64()
806 void LIRGenerator::visitSignExtendInt64(MSignExtendInt64* ins) { in visitSignExtendInt64() argument
809 useInt64FixedAtStart(ins->input(), Register64(edx, eax))); in visitSignExtendInt64()
810 defineInt64Fixed(lir, ins, in visitSignExtendInt64()