std/jpeg: grow quant_tables' elements, s/u8/u16/
diff --git a/internal/cgen/builtin.go b/internal/cgen/builtin.go
index 1c7bece..5f7a6c4 100644
--- a/internal/cgen/builtin.go
+++ b/internal/cgen/builtin.go
@@ -1190,7 +1190,7 @@
 	switch recvTyp.QID()[1] {
 	case t.IDIOReader:
 		switch method.Ident() {
-		case t.IDReadU8, t.IDReadU8AsU32, t.IDReadU8AsU64:
+		case t.IDReadU8, t.IDReadU8AsU16, t.IDReadU8AsU32, t.IDReadU8AsU64:
 			if err := g.writeCoroSuspPoint(b, false); err != nil {
 				return err
 			}
@@ -1389,8 +1389,9 @@
 }{
 	t.IDReadU8 - readMethodsBase: {8, 8, 'b'},
 
-	t.IDReadU16BE - readMethodsBase: {16, 16, 'b'},
-	t.IDReadU16LE - readMethodsBase: {16, 16, 'l'},
+	t.IDReadU8AsU16 - readMethodsBase: {16, 8, 'b'},
+	t.IDReadU16BE - readMethodsBase:   {16, 16, 'b'},
+	t.IDReadU16LE - readMethodsBase:   {16, 16, 'l'},
 
 	t.IDReadU8AsU32 - readMethodsBase:    {32, 8, 'b'},
 	t.IDReadU16BEAsU32 - readMethodsBase: {32, 16, 'b'},
@@ -1426,8 +1427,9 @@
 }{
 	t.IDPeekU8 - peekMethodsBase: {8, 8, 'b'},
 
-	t.IDPeekU16BE - peekMethodsBase: {16, 16, 'b'},
-	t.IDPeekU16LE - peekMethodsBase: {16, 16, 'l'},
+	t.IDPeekU8AsU16 - peekMethodsBase: {16, 8, 'b'},
+	t.IDPeekU16BE - peekMethodsBase:   {16, 16, 'b'},
+	t.IDPeekU16LE - peekMethodsBase:   {16, 16, 'l'},
 
 	t.IDPeekU8AsU32 - peekMethodsBase:    {32, 8, 'b'},
 	t.IDPeekU16BEAsU32 - peekMethodsBase: {32, 16, 'b'},
diff --git a/lang/builtin/builtin.go b/lang/builtin/builtin.go
index 2f678fa..59a44b3 100644
--- a/lang/builtin/builtin.go
+++ b/lang/builtin/builtin.go
@@ -431,6 +431,7 @@
 
 	"io_reader.read_u8?() u8",
 
+	"io_reader.read_u8_as_u16?() u16[..= 0xFF]",
 	"io_reader.read_u16be?() u16",
 	"io_reader.read_u16le?() u16",
 
@@ -467,6 +468,7 @@
 
 	"io_reader.peek_u8() u8",
 
+	"io_reader.peek_u8_as_u16() u16[..= 0xFF]",
 	"io_reader.peek_u16be() u16",
 	"io_reader.peek_u16le() u16",
 
diff --git a/lang/token/list.go b/lang/token/list.go
index eab589c..5f4795b 100644
--- a/lang/token/list.go
+++ b/lang/token/list.go
@@ -524,8 +524,9 @@
 	IDUndoByte = ID(0x180)
 	IDReadU8   = ID(0x181)
 
-	IDReadU16BE = ID(0x182)
-	IDReadU16LE = ID(0x183)
+	IDReadU8AsU16 = ID(0x185)
+	IDReadU16BE   = ID(0x186)
+	IDReadU16LE   = ID(0x187)
 
 	IDReadU8AsU32    = ID(0x189)
 	IDReadU16BEAsU32 = ID(0x18A)
@@ -557,8 +558,9 @@
 
 	IDPeekU8 = ID(0x1A1)
 
-	IDPeekU16BE = ID(0x1A2)
-	IDPeekU16LE = ID(0x1A3)
+	IDPeekU8AsU16 = ID(0x1A5)
+	IDPeekU16BE   = ID(0x1A6)
+	IDPeekU16LE   = ID(0x1A7)
 
 	IDPeekU8AsU32    = ID(0x1A9)
 	IDPeekU16BEAsU32 = ID(0x1AA)
@@ -965,8 +967,9 @@
 	IDUndoByte: "undo_byte",
 	IDReadU8:   "read_u8",
 
-	IDReadU16BE: "read_u16be",
-	IDReadU16LE: "read_u16le",
+	IDReadU8AsU16: "read_u8_as_u16",
+	IDReadU16BE:   "read_u16be",
+	IDReadU16LE:   "read_u16le",
 
 	IDReadU8AsU32:    "read_u8_as_u32",
 	IDReadU16BEAsU32: "read_u16be_as_u32",
@@ -998,8 +1001,9 @@
 
 	IDPeekU8: "peek_u8",
 
-	IDPeekU16BE: "peek_u16be",
-	IDPeekU16LE: "peek_u16le",
+	IDPeekU8AsU16: "peek_u8_as_u16",
+	IDPeekU16BE:   "peek_u16be",
+	IDPeekU16LE:   "peek_u16le",
 
 	IDPeekU8AsU32:    "peek_u8_as_u32",
 	IDPeekU16BEAsU32: "peek_u16be_as_u32",
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index 695be93..fdde668 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -9152,8 +9152,8 @@
     uint32_t f_bitstream_ri;
     uint32_t f_bitstream_wi;
     uint32_t f_bitstream_padding;
-    uint8_t f_quant_tables[4][64];
-    uint8_t f_saved_quant_tables[4][64];
+    uint16_t f_quant_tables[4][64];
+    uint16_t f_saved_quant_tables[4][64];
     uint8_t f_huff_tables_symbols[8][256];
     uint32_t f_huff_tables_slow[8][16];
     uint16_t f_huff_tables_fast[8][256];
@@ -40494,7 +40494,7 @@
             status = wuffs_base__make_status(wuffs_base__suspension__short_read);
             goto suspend;
           }
-          uint8_t t_1 = *iop_a_src++;
+          uint16_t t_1 = *iop_a_src++;
           self->private_impl.f_quant_tables[v_q][WUFFS_JPEG__UNZIG[v_i]] = t_1;
         }
       }
diff --git a/std/jpeg/decode_jpeg.wuffs b/std/jpeg/decode_jpeg.wuffs
index da8e4ef..64b11f7 100644
--- a/std/jpeg/decode_jpeg.wuffs
+++ b/std/jpeg/decode_jpeg.wuffs
@@ -276,8 +276,8 @@
         // arbitrary.
         bitstream_padding : base.u32[..= 12345],
 
-        quant_tables       : array[4] array[64] base.u8,
-        saved_quant_tables : array[4] array[64] base.u8,
+        quant_tables       : array[4] array[64] base.u16[..= 0xFF],
+        saved_quant_tables : array[4] array[64] base.u16[..= 0xFF],
 
         // huff_tables_symbols[(tc*4)|th][i] is the i'th Huffman code's symbol.
         huff_tables_symbols : array[8] array[256] base.u8,
@@ -509,7 +509,7 @@
         i = 0
         while i < 64 {
             i += 1
-            this.quant_tables[q][UNZIG[i]] = args.src.read_u8?()
+            this.quant_tables[q][UNZIG[i]] = args.src.read_u8_as_u16?()
         } endwhile
         this.seen_dqt[q] = true
 
diff --git a/test/c/std/jpeg.c b/test/c/std/jpeg.c
index 11ac43d..b7c068e 100644
--- a/test/c/std/jpeg.c
+++ b/test/c/std/jpeg.c
@@ -550,7 +550,7 @@
 
   // This is "test/data/bricks-color.jpeg"'s first quantization table, in
   // natural (not zig-zag) order.
-  const uint8_t quant_table[64] = {
+  const uint16_t quant_table[64] = {
       0x03, 0x02, 0x02, 0x03, 0x04, 0x06, 0x08, 0x0A,  //
       0x02, 0x02, 0x02, 0x03, 0x04, 0x09, 0x0A, 0x09,  //
       0x02, 0x02, 0x03, 0x04, 0x06, 0x09, 0x0B, 0x09,  //