From dcf7d2a15920303ff74df298f3fb1cf29289c118 Mon Sep 17 00:00:00 2001 From: Luc Van Oostenryck Date: Sat, 4 Jul 2020 15:06:14 +0200 Subject: add support for arch specific asm constraints When evaluating asm operands it must be known if they correspond to a memory operand or not in order to process/ignore the 'noderef' attribute. This is done for operands specified with the common constraints but not for the machine specific constraints. So, add support for processing machine specific constraints. Signed-off-by: Luc Van Oostenryck --- evaluate.c | 5 ++++- target.h | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/evaluate.c b/evaluate.c index 3b9aec3c..f515ce6f 100644 --- a/evaluate.c +++ b/evaluate.c @@ -3642,7 +3642,10 @@ static void parse_asm_constraint(struct asm_operand *op) return; default: - // FIXME: arch-specific (and multi-letter) constraints + if (arch_target->asm_constraint) + str = arch_target->asm_constraint(op, c, str); + + // FIXME: multi-letter constraints break; } } diff --git a/target.h b/target.h index 8640026c..3ef0d520 100644 --- a/target.h +++ b/target.h @@ -53,7 +53,7 @@ extern int pointer_alignment; extern int bits_in_enum; extern int enum_alignment; - +struct asm_operand; struct builtin_fn; struct target { @@ -77,6 +77,7 @@ struct target { void (*init)(const struct target *self); void (*predefine)(const struct target *self); + const char *(*asm_constraint)(struct asm_operand *op, int c, const char *str); }; extern const struct target target_default; -- cgit 1.2.3-korg