Tweak std/png.decoder.filter_4

wuffs_png_decode_19k_8bpp/clang9          91.8MB/s ± 1%   93.5MB/s ± 0%   +1.86%  (p=0.008 n=5+5)
wuffs_png_decode_40k_24bpp/clang9          115MB/s ± 1%    112MB/s ± 0%   -2.74%  (p=0.008 n=5+5)
wuffs_png_decode_77k_8bpp/clang9           345MB/s ± 0%    351MB/s ± 0%   +1.83%  (p=0.008 n=5+5)
wuffs_png_decode_552k_32bpp/clang9         152MB/s ± 1%    129MB/s ± 1%  -15.14%  (p=0.008 n=5+5)
wuffs_png_decode_4002k_24bpp/clang9        116MB/s ± 0%    115MB/s ± 0%   -1.57%  (p=0.008 n=5+5)

wuffs_png_decode_filter_1_sub/clang9       982MB/s ± 0%    938MB/s ± 0%   -4.52%  (p=0.008 n=5+5)
wuffs_png_decode_filter_2_up/clang9       12.7GB/s ± 0%   13.4GB/s ± 0%   +5.28%  (p=0.008 n=5+5)
wuffs_png_decode_filter_3_average/clang9   757MB/s ± 0%    759MB/s ± 0%   +0.29%  (p=0.032 n=5+5)
wuffs_png_decode_filter_4_paeth/clang9    82.1MB/s ± 0%  108.7MB/s ± 0%  +32.41%  (p=0.008 n=5+5)

wuffs_png_decode_19k_8bpp/gcc10           98.9MB/s ± 0%   99.7MB/s ± 1%   +0.87%  (p=0.008 n=5+5)
wuffs_png_decode_40k_24bpp/gcc10           118MB/s ± 1%    116MB/s ± 0%   -1.08%  (p=0.008 n=5+5)
wuffs_png_decode_77k_8bpp/gcc10            321MB/s ± 0%    322MB/s ± 0%   +0.32%  (p=0.016 n=4+5)
wuffs_png_decode_552k_32bpp/gcc10          144MB/s ± 0%    162MB/s ± 0%  +13.03%  (p=0.008 n=5+5)
wuffs_png_decode_4002k_24bpp/gcc10         118MB/s ± 1%    120MB/s ± 1%   +1.32%  (p=0.008 n=5+5)

wuffs_png_decode_filter_1_sub/gcc10        903MB/s ± 0%   1119MB/s ± 0%  +23.96%  (p=0.008 n=5+5)
wuffs_png_decode_filter_2_up/gcc10        11.0GB/s ± 0%   11.1GB/s ± 0%   +0.68%  (p=0.008 n=5+5)
wuffs_png_decode_filter_3_average/gcc10    749MB/s ± 0%    749MB/s ± 0%     ~     (p=1.000 n=5+5)
wuffs_png_decode_filter_4_paeth/gcc10     81.8MB/s ± 0%   90.5MB/s ± 1%  +10.74%  (p=0.008 n=5+5)
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index 9cfd29a..079f3d4 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -30103,12 +30103,12 @@
       v_pc = (0 - v_pc);
     }
     if ((v_pa <= v_pb) && (v_pa <= v_pc)) {
-      a_curr.ptr[v_i] += ((uint8_t)((v_fa & 255)));
     } else if (v_pb <= v_pc) {
-      a_curr.ptr[v_i] += ((uint8_t)((v_fb & 255)));
+      v_fa = v_fb;
     } else {
-      a_curr.ptr[v_i] += ((uint8_t)((v_fc & 255)));
+      v_fa = v_fc;
     }
+    a_curr.ptr[v_i] += ((uint8_t)((v_fa & 255)));
     v_i += 1;
   }
   return wuffs_base__make_empty_struct();
diff --git a/std/png/decode_filter_fallback.wuffs b/std/png/decode_filter_fallback.wuffs
index 5e8d6b1..fdc0708 100644
--- a/std/png/decode_filter_fallback.wuffs
+++ b/std/png/decode_filter_fallback.wuffs
@@ -71,6 +71,7 @@
 			i += 1
 			assert i >= filter_distance via "a >= b: a >= (b + c); 0 <= c"(c: 1)
 		} endwhile
+
 	} else {
 		n = args.curr.length().min(a: args.prev.length())
 		i = 0
@@ -161,12 +162,13 @@
 			pc = 0 ~mod- pc
 		}
 		if (pa <= pb) and (pa <= pc) {
-			args.curr[i] ~mod+= (fa & 0xFF) as base.u8
+			// No-op.
 		} else if pb <= pc {
-			args.curr[i] ~mod+= (fb & 0xFF) as base.u8
+			fa = fb
 		} else {
-			args.curr[i] ~mod+= (fc & 0xFF) as base.u8
+			fa = fc
 		}
+		args.curr[i] ~mod+= (fa & 0xFF) as base.u8
 		i += 1
 		assert i >= filter_distance via "a >= b: a >= (b + c); 0 <= c"(c: 1)
 	} endwhile