diff options
author | amylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-01-09 17:28:49 +0000 |
---|---|---|
committer | amylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-01-09 17:28:49 +0000 |
commit | 48ea55773270391b07804f5d6b4dfb28b7b3bd3f (patch) | |
tree | 71e3146782ec281fdcd5e689d1f1cbbe5f3c2286 /gcc/reload1.c | |
parent | f35a3d21a719693dc824d933f7e8ce2d1245addf (diff) | |
download | gcc-48ea55773270391b07804f5d6b4dfb28b7b3bd3f.tar.gz |
* defaults.h (EXTRA_MEMORY_CONSTRAINT): Add STR argument.
(EXTRA_ADDRESS_CONSTRAINT): Likewise.
(CONSTRAINT_LEN): Provide default definition.
(CONST_OK_FOR_CONSTRAINT_P): Likewise.
(CONST_DOUBLE_OK_FOR_CONSTRAINT_P): Likewise.
(EXTRA_CONSTRAINT_STR): Likewise.
(REG_CLASS_FROM_CONSTRAINT): Define.
* genoutput.c (check_constraint_len, constraint_len): New functions.
(validate_insn_alternatives): Check CONSTRAINT_LEN for each
constraint / modifier.
(gen_insn): Call check_constraint_len.
* local-alloc.c (block_alloc): Update to use new macros / pass
second argument to EXTRA_{MEMORY,ADDRESS}_CONSTRAINT.
* ra-build.c (handle_asm_insn): Likewise.
* recog.c (asm_operand_ok, preprocess_constraints): Likewise.
(constrain_operands, peep2_find_free_register): Likewise.
* regclass.c (record_operand_costs, record_reg_classes): Likewise.
* regmove.c (find_matches): Likewise.
* reload.c (push_secondary_reload, find_reloads): Likewise.
(alternative_allows_memconst): Likewise.
* reload1.c (maybe_fix_stack_asms): Likewise.
(reload_cse_simplify_operands): Likewise.
* stmt.c (parse_output_constraint, parse_input_constraint): Likewise.
* doc/tm.texi (CONSTRAINT_LEN, REG_CLASS_FROM_CONSTRAINT): Document.
(CONST_OK_FOR_CONSTRAINT_P): Likewise.
(CONST_DOUBLE_OK_FOR_CONSTRAINT_P, EXTRA_CONSTRAINT_STR): Likewise.
(EXTRA_MEMORY_CONSTRAINT, EXTRA_ADDRESS_CONSTRAINT): Add STR argument.
* config/s390/s390.h (EXTRA_MEMORY_CONSTRAINT): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@61119 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r-- | gcc/reload1.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c index 40204074af7..4fd401c89bb 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -1355,7 +1355,7 @@ maybe_fix_stack_asms () for (;;) { - char c = *p++; + char c = *p; if (c == '\0' || c == ',' || c == '#') { @@ -1363,6 +1363,7 @@ maybe_fix_stack_asms () class, and reset the class. */ IOR_HARD_REG_SET (allowed, reg_class_contents[cls]); cls = NO_REGS; + p++; if (c == '#') do { c = *p++; @@ -1393,13 +1394,14 @@ maybe_fix_stack_asms () break; default: - if (EXTRA_ADDRESS_CONSTRAINT (c)) + if (EXTRA_ADDRESS_CONSTRAINT (c, p)) cls = (int) reg_class_subunion[cls] [(int) MODE_BASE_REG_CLASS (VOIDmode)]; else cls = (int) reg_class_subunion[cls] - [(int) REG_CLASS_FROM_LETTER (c)]; + [(int) REG_CLASS_FROM_CONSTRAINT (c, p)]; } + p += CONSTRAINT_LEN (c, p); } } /* Those of the registers which are clobbered, but allowed by the @@ -8418,7 +8420,7 @@ reload_cse_simplify_operands (insn, testreg) p = constraints[i]; for (;;) { - char c = *p++; + char c = *p; switch (c) { @@ -8442,7 +8444,9 @@ reload_cse_simplify_operands (insn, testreg) default: class - = reg_class_subunion[(int) class][(int) REG_CLASS_FROM_LETTER ((unsigned char) c)]; + = (reg_class_subunion + [(int) class] + [(int) REG_CLASS_FROM_CONSTRAINT ((unsigned char) c, p)]); break; case ',': case '\0': @@ -8462,6 +8466,7 @@ reload_cse_simplify_operands (insn, testreg) j++; break; } + p += CONSTRAINT_LEN (c, p); if (c == '\0') break; |