added % constraint

tcc-xref
bellard 2003-04-27 11:46:10 +00:00
parent a901c5f204
commit 68c800981e
1 changed files with 10 additions and 4 deletions

View File

@ -745,6 +745,13 @@ static inline int constraint_priority(const char *str)
return priority;
}
static const char *skip_constraint_modifiers(const char *p)
{
while (*p == '=' || *p == '&' || *p == '+' || *p == '%')
p++;
return p;
}
static void asm_compute_constraints(uint8_t *regs_allocated,
ASMOperand *operands,
int nb_operands1, int nb_outputs,
@ -772,6 +779,7 @@ static void asm_compute_constraints(uint8_t *regs_allocated,
str = op->constraint;
op->ref_index = -1;
op->reg = -1;
str = skip_constraint_modifiers(str);
if (!is_output && (isnum(*str) || *str == '[')) {
/* this is a reference to another constraint */
k = find_constraint(operands, nb_operands1, str, NULL);
@ -780,9 +788,8 @@ static void asm_compute_constraints(uint8_t *regs_allocated,
j, str);
op->ref_index = k;
str = operands[k].constraint;
str = skip_constraint_modifiers(str);
}
while (*str == '=' || *str == '&' || *str == '+')
str++;
op->priority = constraint_priority(str);
}
@ -815,8 +822,7 @@ static void asm_compute_constraints(uint8_t *regs_allocated,
str = operands[op->ref_index].constraint;
}
while (*str == '=' || *str == '&' || *str == '+')
str++;
str = skip_constraint_modifiers(str);
try_next:
c = *str++;
switch(c) {