*** empty log message ***
authorRichard Stallman <rms@gnu.org>
Thu, 18 Jun 1992 17:38:13 +0000 (17:38 +0000)
committerRichard Stallman <rms@gnu.org>
Thu, 18 Jun 1992 17:38:13 +0000 (17:38 +0000)
From-SVN: r1207

gcc/stmt.c
gcc/varasm.c

index 2c2759686e0ca2f4f97090f79789a2de301461d3..11c122b2b349fbd0dc00eb8b1d03e7f487b4cb8a 100644 (file)
@@ -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;
            }
index be2ad47dc08573e9d32d645b914546b6dc19ca5f..be250f4b13fc4e711c072387575d32993e4bfbf2 100644 (file)
@@ -212,8 +212,9 @@ strip_reg_name (name)
 \f
 /* 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;