tgsi/text: Allow `-|src|` variant of `-(|src|)`.
authorMichal Krol <michal@vmware.com>
Fri, 3 Apr 2009 12:54:20 +0000 (14:54 +0200)
committerMichal Krol <michal@vmware.com>
Fri, 3 Apr 2009 12:59:22 +0000 (14:59 +0200)
src/gallium/auxiliary/tgsi/tgsi_text.c

index fdaee9b060b711bbf5081b25523748298ff71bb3..bb1c7dc6ccf8dddf144ffd4a08319613ee4987e1 100644 (file)
@@ -562,6 +562,7 @@ parse_src_operand(
    uint ind_file;
    int ind_index;
    uint swizzle[4];
+   boolean parsed_ext_negate_paren = FALSE;
    boolean parsed_swizzle;
    boolean parsed_extswizzle;
 
@@ -574,10 +575,17 @@ parse_src_operand(
          src->SrcRegisterExtMod.Negate = 1;
          eat_opt_white( &cur );
          ctx->cur = cur;
+         parsed_ext_negate_paren = TRUE;
+      }
+      else if (*cur == '|') {
+         cur++;
+         src->SrcRegisterExtMod.Negate = 1;
+         src->SrcRegisterExtMod.Absolute = 1;
+         eat_opt_white(&cur);
+         ctx->cur = cur;
       }
    }
-
-   if (*ctx->cur == '|') {
+   else if (*ctx->cur == '|') {
       ctx->cur++;
       eat_opt_white( &ctx->cur );
       src->SrcRegisterExtMod.Absolute = 1;
@@ -715,7 +723,7 @@ parse_src_operand(
       ctx->cur++;
    }
 
-   if (src->SrcRegisterExtMod.Negate) {
+   if (parsed_ext_negate_paren) {
       eat_opt_white( &ctx->cur );
       if (*ctx->cur != ')') {
          report_error( ctx, "Expected `)'" );