From 68c800981ed8b6e71dc3e0f24fd7ff66274eb406 Mon Sep 17 00:00:00 2001 From: bellard Date: Sun, 27 Apr 2003 11:46:10 +0000 Subject: [PATCH] added % constraint --- i386-asm.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/i386-asm.c b/i386-asm.c index 98054973..b9d8edab 100644 --- a/i386-asm.c +++ b/i386-asm.c @@ -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) { -- 2.11.4.GIT