aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/stmt.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 4d3ed87..3c8ef37 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -1492,6 +1492,12 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
XVECEXP (body, 3, i) /* argvec */
= expand_expr (TREE_VALUE (tail), NULL_RTX, VOIDmode, 0);
+ if (CONSTANT_P (XVECEXP (body, 3, i))
+ && ! general_operand (XVECEXP (body, 3, i),
+ TYPE_MODE (TREE_TYPE (TREE_VALUE (tail)))))
+ XVECEXP (body, 3, i)
+ = force_reg (TYPE_MODE (TREE_TYPE (TREE_VALUE (tail))),
+ XVECEXP (body, 3, i));
XVECEXP (body, 4, i) /* constraints */
= gen_rtx (ASM_INPUT, TYPE_MODE (TREE_TYPE (TREE_VALUE (tail))),
TREE_STRING_POINTER (TREE_PURPOSE (tail)));