aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-06-18 17:38:13 +0000
committerRichard Stallman <rms@gnu.org>1992-06-18 17:38:13 +0000
commitc09e64987db14029d96c1a2fb0d05a74535f864b (patch)
treec44cc579dc50f803d5e4bdad12f47f315543dce0 /gcc
parentc1f7c223102198c1a344fcbc9d854044993ece90 (diff)
downloadgcc-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.c11
-rw-r--r--gcc/varasm.c8
2 files changed, 15 insertions, 4 deletions
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 2c27596..11c122b 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -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;