*** tc-ss.c.orig Thu Sep 23 23:54:55 1999 --- tc-ss.c Thu Sep 23 23:55:50 1999 *************** *** 2333,2344 **** char c; int bits, start, end, value; ! if (sscanf(s, "/%c/", &c) == 1) { ! if (!islower(c)) ! as_fatal ("Unknown flag: `/%c'", c); ! insn_flags |= 1 << (c - 'a'); ! } ! else if (sscanf(s, "/%d:%d(%d)/", &end, &start, &value) == 3) { if (start >= end) as_fatal ("Bad flag format: start >= end, '%s' (ignore trailing /)", s); bits = (end - start) + 1; --- 2333,2344 ---- char c; int bits, start, end, value; ! /* -- Changed on 06/30/97 by plakal@cs.wisc.edu : ! * -- The order of the flag checks has been reversed, otherwise ! * -- the field annotations ( /N:M(X) ) aren't recognized ! */ ! ! if (sscanf(s, "/%d:%d(%d)/", &end, &start, &value) == 3) { if (start >= end) as_fatal ("Bad flag format: start >= end, '%s' (ignore trailing /)", s); bits = (end - start) + 1; *************** *** 2348,2353 **** --- 2348,2358 ---- as_fatal ("Bad flag value: negative, '%s' (ignore trailing /)", s); insn_flags |= value << start; } + else if (sscanf(s, "/%c/", &c) == 1) { + if (!islower(c)) + as_fatal ("Unknown flag: `/%c'", c); + insn_flags |= 1 << (c - 'a'); + } else as_fatal ("Unknown flag: `%s' (ignore trailing /)", s); } *************** *** 2402,2414 **** insn_error = NULL; ! for (t=opc,s=str; islower (*s) || (*s>='0' && *s<='3') || *s=='.'; ++s) { *t++ = *s; ! continue; } switch (*s) { case '\0': *t = '\0'; break; --- 2407,2422 ---- insn_error = NULL; ! for (t=opc,s=str; islower (*s) || (*s>='0' && *s<='3') || (*s=='.'); ++s) { *t++ = *s; ! continue; } switch (*s) { case '\0': + case '/' : /* -- Added on 06/30/97 by plakal@cs.wisc.edu, + * -- this fixes the annotation-ignoring problem + */ *t = '\0'; break;