diff options
author | Richard Stallman <rms@gnu.org> | 1992-06-18 17:38:13 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1992-06-18 17:38:13 +0000 |
commit | c09e64987db14029d96c1a2fb0d05a74535f864b (patch) | |
tree | c44cc579dc50f803d5e4bdad12f47f315543dce0 /gcc | |
parent | c1f7c223102198c1a344fcbc9d854044993ece90 (diff) | |
download | gcc-c09e64987db14029d96c1a2fb0d05a74535f864b.zip gcc-c09e64987db14029d96c1a2fb0d05a74535f864b.tar.gz gcc-c09e64987db14029d96c1a2fb0d05a74535f864b.tar.bz2 |
*** empty log message ***
From-SVN: r1207
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/stmt.c | 11 | ||||
-rw-r--r-- | gcc/varasm.c | 8 |
2 files changed, 15 insertions, 4 deletions
@@ -1012,7 +1012,8 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line) for (tail = clobbers; tail; tail = TREE_CHAIN (tail)) { char *regname = TREE_STRING_POINTER (TREE_VALUE (tail)); - if (decode_reg_name (regname) >= 0) + i = decode_reg_name (regname); + if (i >= 0 || i == -4) ++nclobbers; } @@ -1183,9 +1184,15 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line) if (j < 0) { - if (j == -3) + if (j == -3) /* `cc', which is not a register */ continue; + if (j == -4) /* `memory', don't cache memory across asm */ + { + XVECEXP (body, 0, i++) = gen_rtx (CLOBBER, VOIDmode, const0_rtx); + continue; + } + error ("unknown register name `%s' in `asm'", regname); return; } diff --git a/gcc/varasm.c b/gcc/varasm.c index be2ad47..be250f4 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -212,8 +212,9 @@ strip_reg_name (name) /* Decode an `asm' spec for a declaration as a register name. Return the register number, or -1 if nothing specified, - or -2 if the ASMSPEC is not `cc' and is not recognized, - or -3 if ASMSPEC is `cc' and is not recognized. + or -2 if the ASMSPEC is not `cc' or `memory' and is not recognized, + or -3 if ASMSPEC is `cc' and is not recognized, + or -4 if ASMSPEC is `memory' and is not recognized. Accept an exact spelling or a decimal number. Prefixes such as % are optional. */ @@ -257,6 +258,9 @@ decode_reg_name (asmspec) } #endif /* ADDITIONAL_REGISTER_NAMES */ + if (!strcmp (asmspec, "memory")) + return -4; + if (!strcmp (asmspec, "cc")) return -3; |