void LIRGeneratorARM::defineUntypedPhi(MPhi* phi, size_t lirIndex) { LPhi* type = current->getPhi(lirIndex + VREG_TYPE_OFFSET); LPhi* payload = current->getPhi(lirIndex + VREG_DATA_OFFSET); uint32_t typeVreg = getVirtualRegister(); phi->setVirtualRegister(typeVreg); uint32_t payloadVreg = getVirtualRegister(); MOZ_ASSERT(typeVreg + 1 == payloadVreg); type->setDef(0, LDefinition(typeVreg, LDefinition::TYPE)); payload->setDef(0, LDefinition(payloadVreg, LDefinition::PAYLOAD)); annotate(type); annotate(payload); }
void LIRGeneratorARM::defineInt64Phi(MPhi* phi, size_t lirIndex) { LPhi* low = current->getPhi(lirIndex + INT64LOW_INDEX); LPhi* high = current->getPhi(lirIndex + INT64HIGH_INDEX); uint32_t lowVreg = getVirtualRegister(); phi->setVirtualRegister(lowVreg); uint32_t highVreg = getVirtualRegister(); MOZ_ASSERT(lowVreg + INT64HIGH_INDEX == highVreg + INT64LOW_INDEX); low->setDef(0, LDefinition(lowVreg, LDefinition::INT32)); high->setDef(0, LDefinition(highVreg, LDefinition::INT32)); annotate(high); annotate(low); }
void LIRGeneratorShared::defineTypedPhi(MPhi* phi, size_t lirIndex) { LPhi* lir = current->getPhi(lirIndex); uint32_t vreg = getVirtualRegister(); phi->setVirtualRegister(vreg); lir->setDef(0, LDefinition(vreg, LDefinition::TypeFrom(phi->type()))); annotate(lir); }
bool LIRGeneratorARM::defineUntypedPhi(MPhi *phi, size_t lirIndex) { LPhi *type = current->getPhi(lirIndex + VREG_TYPE_OFFSET); LPhi *payload = current->getPhi(lirIndex + VREG_DATA_OFFSET); uint32_t typeVreg = getVirtualRegister(); if (typeVreg >= MAX_VIRTUAL_REGISTERS) return false; phi->setVirtualRegister(typeVreg); uint32_t payloadVreg = getVirtualRegister(); if (payloadVreg >= MAX_VIRTUAL_REGISTERS) return false; JS_ASSERT(typeVreg + 1 == payloadVreg); type->setDef(0, LDefinition(typeVreg, LDefinition::TYPE)); payload->setDef(0, LDefinition(payloadVreg, LDefinition::PAYLOAD)); annotate(type); annotate(payload); return true; }
bool LIRGeneratorShared::defineTypedPhi(MPhi *phi, size_t lirIndex) { LPhi *lir = current->getPhi(lirIndex); uint32_t vreg = getVirtualRegister(); if (vreg >= MAX_VIRTUAL_REGISTERS) return false; phi->setVirtualRegister(vreg); lir->setDef(0, LDefinition(vreg, LDefinition::TypeFrom(phi->type()))); annotate(lir); return true; }