예제 #1
0
파일: gen.c 프로젝트: descent/ucc-code
Symbol AddressOf(Symbol p)
{
	if (p->kind == SK_Temp && AsVar(p)->def->op == DEREF)
	{
		return AsVar(p)->def->src1;
	}

	p->addressed = 1;
	if (p->kind == SK_Variable)
	{
		TrackValueChange(p);
	}
	return TryAddValue(T(POINTER), ADDR, p, NULL); 
}
예제 #2
0
/* 生成赋值指令 */
void GenerateMove (Type ty, Symbol dst, Symbol src)
{
	IRInst inst;

	ALLOC(inst);
	dst->ref++;
	src->ref++;

	inst->ty = ty;
	inst->opcode  = MOV;
	inst->opds[0] = dst;
	inst->opds[1] = src;
	inst->opds[2] = NULL;
	AppendInst (inst);

	if (dst->kind == SK_Variable) {

		TrackValueChange (dst);
	} else if (dst->kind == SK_Temp) {

		DefineTemp (dst, MOV, (Symbol)inst, NULL);
	}
}