예제 #1
0
static void swap() {
    int left_var = variable(), right_var = variable();
    int reg_one = next_register(), reg_two = next_register();
    CodeGen(LOAD, reg_one, left_var, EMPTY_FIELD);
    CodeGen(LOAD, reg_two, right_var, EMPTY_FIELD);
    CodeGen(STORE, left_var, reg_two, EMPTY_FIELD);
    CodeGen(STORE, right_var, reg_one, EMPTY_FIELD);
}
예제 #2
0
파일: Compiler.c 프로젝트: T-G-P/TinyDawg
static int expr()
{
	int reg, left_reg, right_reg;

	switch (token) {
	case '+':
		next_token();
		left_reg = expr();
		right_reg = expr();
		reg = next_register();
		CodeGen(ADD, reg, left_reg, right_reg);
		return reg;
	case '*':
		next_token();
		left_reg = expr();
		right_reg = expr();
		reg = next_register();
		CodeGen(MUL, reg, left_reg, right_reg);
		return reg;
	case '-':
		next_token();
		left_reg = expr();
		right_reg = expr();
		reg = next_register();
		CodeGen(SUB, reg, left_reg, right_reg);
		return reg;

	case '0':
	case '1':
	case '2':
	case '3':
	case '4':
	case '5':
	case '6':
	case '7':
	case '8':
	case '9':
		return digit();
    case 'a':
    case 'b':
    case 'c':
    case 'd':
    case 'e':
        return variable();

	default:
		ERROR("Symbol %c unknown\n", token);
		exit(EXIT_FAILURE);
	}
}
예제 #3
0
파일: Compiler.c 프로젝트: T-G-P/TinyDawg
static int variable()  /* only called for R-values */
{
        int reg;
        if(!is_identifier(token)){
            ERROR("Expected identifier\n");
            exit(EXIT_FAILURE);
        }
        reg = next_register();
        CodeGen(LOAD, reg, token, EMPTY_FIELD);
        next_token();
        return reg;
}
예제 #4
0
static int variable()
{
	int reg;

	if (!is_identifier(token)) {
		ERROR("Expected identifier\n");
		exit(EXIT_FAILURE);
	}
	reg = next_register();
	CodeGen(LOADAI, 0, (token-'a')*4, reg); /* token - 'a' is offset of varible, *4 for byte address */
	next_token();
	return reg;
}
예제 #5
0
static int digit()
{
	int reg;

	if (!is_digit(token)) {
		ERROR("Expected digit\n");
		exit(EXIT_FAILURE);
	}
	reg = next_register();
	CodeGen(LOADI, to_digit(token), reg, EMPTY_FIELD);
	next_token();
	return reg;
}