Add base.utility.cpu_arch_is_32_bit()
diff --git a/internal/cgen/builtin.go b/internal/cgen/builtin.go
index 61ebff4..91d7729 100644
--- a/internal/cgen/builtin.go
+++ b/internal/cgen/builtin.go
@@ -132,6 +132,9 @@
 			return g.writeBuiltinTokenWriter(b, recv, method.Ident(), n.Args(), depth)
 		case t.IDUtility:
 			switch method.Ident() {
+			case t.IDCPUArchIs32Bit:
+				b.writes("(sizeof(void*) == 4)")
+				return nil
 			case t.IDEmptyIOReader, t.IDEmptyIOWriter:
 				if !g.currFunk.usesEmptyIOBuffer {
 					g.currFunk.usesEmptyIOBuffer = true
diff --git a/lang/builtin/builtin.go b/lang/builtin/builtin.go
index e41754c..1ee51b3 100644
--- a/lang/builtin/builtin.go
+++ b/lang/builtin/builtin.go
@@ -271,6 +271,7 @@
 
 	// ---- utility
 
+	"utility.cpu_arch_is_32_bit() bool",
 	"utility.empty_io_reader() io_reader",
 	"utility.empty_io_writer() io_writer",
 	"utility.empty_range_ii_u32() range_ii_u32",
diff --git a/lang/token/list.go b/lang/token/list.go
index e7b7be5..1422fcc 100644
--- a/lang/token/list.go
+++ b/lang/token/list.go
@@ -624,14 +624,15 @@
 
 	// -------- 0x200 block.
 
-	IDAdvance    = ID(0x200)
-	IDCPUArch    = ID(0x201)
-	IDInitialize = ID(0x202)
-	IDLength     = ID(0x203)
-	IDReset      = ID(0x204)
-	IDSet        = ID(0x205)
-	IDUnroll     = ID(0x206)
-	IDUpdate     = ID(0x207)
+	IDAdvance        = ID(0x200)
+	IDCPUArch        = ID(0x201)
+	IDCPUArchIs32Bit = ID(0x202)
+	IDInitialize     = ID(0x203)
+	IDLength         = ID(0x204)
+	IDReset          = ID(0x205)
+	IDSet            = ID(0x206)
+	IDUnroll         = ID(0x207)
+	IDUpdate         = ID(0x208)
 
 	// TODO: range/rect methods like intersection and contains?
 
@@ -1045,14 +1046,15 @@
 
 	// -------- 0x200 block.
 
-	IDAdvance:    "advance",
-	IDCPUArch:    "cpu_arch",
-	IDInitialize: "initialize",
-	IDLength:     "length",
-	IDReset:      "reset",
-	IDSet:        "set",
-	IDUnroll:     "unroll",
-	IDUpdate:     "update",
+	IDAdvance:        "advance",
+	IDCPUArch:        "cpu_arch",
+	IDCPUArchIs32Bit: "cpu_arch_is_32_bit",
+	IDInitialize:     "initialize",
+	IDLength:         "length",
+	IDReset:          "reset",
+	IDSet:            "set",
+	IDUnroll:         "unroll",
+	IDUpdate:         "update",
 
 	IDHighBits: "high_bits",
 	IDLowBits:  "low_bits",
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index f6edbd7..c08442c 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -22325,12 +22325,22 @@
       }
       self->private_impl.f_end_of_block = false;
       while (true) {
-        if (a_src) {
-          a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
-        }
-        v_status = wuffs_deflate__decoder__decode_huffman_fast64(self, a_dst, a_src);
-        if (a_src) {
-          iop_a_src = a_src->data.ptr + a_src->meta.ri;
+        if (sizeof(void*) == 4) {
+          if (a_src) {
+            a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
+          }
+          v_status = wuffs_deflate__decoder__decode_huffman_fast64(self, a_dst, a_src);
+          if (a_src) {
+            iop_a_src = a_src->data.ptr + a_src->meta.ri;
+          }
+        } else {
+          if (a_src) {
+            a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
+          }
+          v_status = wuffs_deflate__decoder__decode_huffman_fast64(self, a_dst, a_src);
+          if (a_src) {
+            iop_a_src = a_src->data.ptr + a_src->meta.ri;
+          }
         }
         if (wuffs_base__status__is_error(&v_status)) {
           status = v_status;
diff --git a/std/deflate/decode_deflate.wuffs b/std/deflate/decode_deflate.wuffs
index 5186f09..c4e51c6 100644
--- a/std/deflate/decode_deflate.wuffs
+++ b/std/deflate/decode_deflate.wuffs
@@ -258,7 +258,11 @@
 
 		this.end_of_block = false
 		while true {
-			status = this.decode_huffman_fast64!(dst: args.dst, src: args.src)
+			if this.util.cpu_arch_is_32_bit() {
+				status = this.decode_huffman_fast64!(dst: args.dst, src: args.src)
+			} else {
+				status = this.decode_huffman_fast64!(dst: args.dst, src: args.src)
+			}
 			if status.is_error() {
 				return status
 			}