/// <summary> /// Allocates the virtual register or stack slot. /// </summary> /// <param name="type">The type.</param> /// <returns></returns> public Operand AllocateVirtualRegisterOrStackSlot(MosaType type) { if (MosaTypeLayout.IsStoredOnStack(type)) { return(AddStackLocal(type)); } else { var resultType = Compiler.GetStackType(type); return(CreateVirtualRegister(resultType)); } }
/// <summary> /// Allocates the local variable virtual registers. /// </summary> /// <param name="locals">The locals.</param> public void SetLocalVariables(IList <MosaLocal> locals) { LocalVariables = new Operand[locals.Count]; int index = 0; foreach (var local in locals) { if (MosaTypeLayout.IsStoredOnStack(local.Type) || local.IsPinned) { LocalVariables[index++] = AddStackLocal(local.Type, local.IsPinned); } else { var stacktype = Compiler.GetStackType(local.Type); LocalVariables[index++] = CreateVirtualRegister(stacktype); } } }