components/zlib/patches/studio-RAWs.patch
author Rich Burridge <rich.burridge@oracle.com>
Tue, 02 May 2017 17:33:26 -0700
changeset 7964 d9801318ed3d
parent 6157 f1976f698680
permissions -rw-r--r--
25981468 Build ilmbase and openexr with the GNU compilers
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6157
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     1
Patch origin: in-house
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     2
Patch status: Solaris-specific; not suitable for upstream
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     3
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     4
--- zlib-1.2.8/inflate.c
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     5
+++ zlib-1.2.8/inflate.c
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     6
@@ -976,8 +976,15 @@ int flush;
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     7
                         state->mode = BAD;
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     8
                         break;
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     9
                     }
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    10
-                    while (copy--)
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    11
-                        state->lens[state->have++] = (unsigned short)len;
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    12
+                    //while (copy--)
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    13
+                    //    state->lens[state->have++] = (unsigned short)len;
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    14
+
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    15
+                    unsigned state_have=state->have;  // Make local copy of state->have to eliminate RAW
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    16
+                    // Change from while to for loop and make local copy of "copy" so it can be unrolled:
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    17
+                    for (unsigned copy_copy=copy; copy_copy>0; copy_copy--, (state_have)++) {
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    18
+                      state->lens[state_have] = (unsigned short)len;
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    19
+                    }
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    20
+                    state->have = state_have;  // Copy back value
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    21
                 }
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    22
             }
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    23
 
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    24
--- zlib-1.2.8/inftrees.c
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    25
+++ zlib-1.2.8/inftrees.c
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    26
@@ -230,12 +230,22 @@
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    27
         }
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    28
 
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    29
         /* replicate for those indices with low len bits equal to huff */
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    30
+        // KPG: Create local variables so the compiler won't access via a pointer
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    31
+        unsigned char op_copy = here.op;
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    32
+        unsigned char bits_copy = here.bits;
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    33
+        unsigned short val_copy = here.val;
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    34
+
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    35
         incr = 1U << (len - drop);
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    36
         fill = 1U << curr;
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    37
         min = fill;                 /* save offset to next table */
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    38
         do {
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    39
             fill -= incr;
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    40
-            next[(huff >> drop) + fill] = here;
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    41
+            //next[(huff >> drop) + fill] = here;  // RAW read
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    42
+
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    43
+            // Instead of the above, storing individual elements eliminates RAW:
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    44
+            next[(huff >> drop) + fill].op = op_copy;
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    45
+            next[(huff >> drop) + fill].bits = bits_copy;
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    46
+            next[(huff >> drop) + fill].val = val_copy;
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    47
         } while (fill != 0);
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    48
 
f1976f698680 23527357 Remove RAW hazards in inflate() and inflate_table()
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    49
         /* backwards increment the len-bit code huff */