mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-21 18:01:15 +00:00
lables are working, but immediates and function return values are borked
This commit is contained in:
parent
5785b93107
commit
ce2f26f0b9
1 changed files with 21 additions and 1 deletions
|
@ -659,9 +659,9 @@ emit_branch (opcode_t *op, expr_t *e, expr_t *l)
|
|||
statref_t *ref;
|
||||
def_t *def = 0;
|
||||
|
||||
st = &statements[numstatements];
|
||||
if (e)
|
||||
def = emit_sub_expr (e, 0);
|
||||
st = &statements[numstatements];
|
||||
emit_statement (op, def, 0, 0);
|
||||
if (l->e.label.statement) {
|
||||
if (op == op_goto)
|
||||
|
@ -842,10 +842,30 @@ emit_expr (expr_t *e)
|
|||
def_t *def;
|
||||
def_t *def_a;
|
||||
def_t *def_b;
|
||||
statref_t *ref;
|
||||
label_t *label;
|
||||
//opcode_t *op;
|
||||
|
||||
switch (e->type) {
|
||||
case ex_label:
|
||||
label = &e->e.label;
|
||||
label->statement = &statements[numstatements];
|
||||
for (ref = label->refs; ref; ref = ref->next) {
|
||||
printf ("%d\n", ref->statement->op);
|
||||
switch (ref->field) {
|
||||
case 0:
|
||||
ref->statement->a = label->statement - ref->statement;
|
||||
break;
|
||||
case 1:
|
||||
ref->statement->b = label->statement - ref->statement;
|
||||
break;
|
||||
case 2:
|
||||
ref->statement->c = label->statement - ref->statement;
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ex_block:
|
||||
for (e = e->e.block.head; e; e = e->next)
|
||||
|
|
Loading…
Reference in a new issue