44 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include "mcg.h"
 | 
						|
 | 
						|
void pass_add_prologue_epilogue(void)
 | 
						|
{
 | 
						|
    int i, j, k;
 | 
						|
 | 
						|
    current_proc->usedregs.count = 0;
 | 
						|
    for (i=0; i<cfg.preorder.count; i++)
 | 
						|
    {
 | 
						|
        struct basicblock* bb = cfg.preorder.item[i];
 | 
						|
 | 
						|
        for (j=0; j<bb->hops.count; j++)
 | 
						|
        {
 | 
						|
            struct hop* hop = bb->hops.item[j];
 | 
						|
 | 
						|
            for (k=0; k<hop->regsin.count; k++)
 | 
						|
            {
 | 
						|
                struct hreg* hreg = hop->regsin.item[k].left;
 | 
						|
                if (!hreg->is_stacked)
 | 
						|
                    array_appendu(¤t_proc->usedregs, hreg);
 | 
						|
            }
 | 
						|
 | 
						|
            for (k=0; k<hop->regsout.count; k++)
 | 
						|
            {
 | 
						|
                struct hreg* hreg = hop->regsout.item[k].left;
 | 
						|
                if (!hreg->is_stacked)
 | 
						|
                    array_appendu(¤t_proc->usedregs, hreg);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
	platform_calculate_offsets();
 | 
						|
 | 
						|
	array_insert(¤t_proc->entry->hops, platform_prologue(), 0);
 | 
						|
 | 
						|
	if (current_proc->exit)
 | 
						|
	{
 | 
						|
		current_proc->exit->hops.count = 0;
 | 
						|
		array_append(¤t_proc->exit->hops, platform_epilogue());
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
/* vim: set sw=4 ts=4 expandtab : */
 | 
						|
 |