diff options
| author | bellard <bellard> | 2003-04-27 11:46:10 +0000 |
|---|---|---|
| committer | bellard <bellard> | 2003-04-27 11:46:10 +0000 |
| commit | 68c800981ed8b6e71dc3e0f24fd7ff66274eb406 (patch) | |
| tree | f71db629a14fd5e0fb762bffccb58157f5fe1deb | |
| parent | a901c5f2040d4fb9452d1c80876bc11faab7af10 (diff) | |
| download | tinycc-68c800981ed8b6e71dc3e0f24fd7ff66274eb406.tar.gz tinycc-68c800981ed8b6e71dc3e0f24fd7ff66274eb406.tar.bz2 | |
added % constraint
| -rw-r--r-- | i386-asm.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -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) { |
