Exemple #1
0
 /// <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));
     }
 }
Exemple #2
0
        /// <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);
                }
            }
        }