constraint
= skip_contraint_modifiers (curr_static_id->operand[dup].constraint);
}
- if (*skip_contraint_modifiers (constraint
- + CONSTRAINT_LEN (constraint[0],
- constraint)) != '\0')
+ cn = lookup_constraint (*constraint == '\0' ? "X" : constraint);
+ /* If we have several alternatives or/and several constraints in an
+ alternative and we can not say at this stage what constraint will be used,
+ use unknown constraint. The exception is an address constraint. If
+ operand has one address constraint, probably all others constraints are
+ address ones. */
+ if (get_constraint_type (cn) != CT_ADDRESS
+ && *skip_contraint_modifiers (constraint
+ + CONSTRAINT_LEN (constraint[0],
+ constraint)) != '\0')
cn = CONSTRAINT__UNKNOWN;
- else
- cn = lookup_constraint (*constraint == '\0' ? "X" : constraint);
if (insn_extra_address_constraint (cn)
/* When we find an asm operand with an address constraint that
doesn't satisfy address_operand to begin with, we clear
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-mtune=z15 -march=z13 -mzarch -O2 -fno-stack-protector -fPIC" } */
+
+typedef struct {
+ int exponent;
+ unsigned short lsu[];
+} decNumber;
+decNumber decDivideOp_lhs;
+short decDivideOp_varbuff;
+void decDivideOp(decNumber *rhs) {
+ short *msu1;
+ int exponent;
+ unsigned short *source;
+ for (; source >= decDivideOp_lhs.lsu; source--, msu1--)
+ *msu1 = *source;
+ for (;;)
+ if (exponent)
+ if (decDivideOp_varbuff)
+ exponent = rhs->exponent;
+}