diff --git a/doc/changelog.md b/doc/changelog.md
index f58e8c0..205ad84 100644
--- a/doc/changelog.md
+++ b/doc/changelog.md
@@ -21,6 +21,7 @@
 - Spun `std/zlib` out of `std/flate`.
 - Let the `std/zlib` decoder ignore checksums.
 - Renamed `std/flate` to `std/deflate`.
+- Renamed `!=` to `<>`; `!` is now only for impure functions.
 - Renamed `~+` to `~mod+`; added `~mod-`, `~sat+` and `~sat-`.
 - Removed `&^`.
 - Renamed `$(etc)` to `[etc]`.
@@ -67,4 +68,4 @@
 
 ---
 
-Updated on February 2019.
+Updated on March 2019.
diff --git a/lang/ast/string.go b/lang/ast/string.go
index 871814c..7a02a00 100644
--- a/lang/ast/string.go
+++ b/lang/ast/string.go
@@ -164,7 +164,7 @@
 	t.IDXBinaryTildeModMinus:  " ~mod- ",
 	t.IDXBinaryTildeSatPlus:   " ~sat+ ",
 	t.IDXBinaryTildeSatMinus:  " ~sat- ",
-	t.IDXBinaryNotEq:          " != ",
+	t.IDXBinaryNotEq:          " <> ",
 	t.IDXBinaryLessThan:       " < ",
 	t.IDXBinaryLessEq:         " <= ",
 	t.IDXBinaryEqEq:           " == ",
diff --git a/lang/check/check_test.go b/lang/check/check_test.go
index 12aabca..d80cc9e 100644
--- a/lang/check/check_test.go
+++ b/lang/check/check_test.go
@@ -86,7 +86,7 @@
 			while:label p == q,
 				pre true,
 				inv true,
-				post p != q,
+				post p <> q,
 			{
 				// Redundant, but shows the labeled jump syntax.
 				continue:label
@@ -191,7 +191,7 @@
 		"i = 10  | 3": 11,
 		"i = 10  ^ 3": 9,
 
-		"b = 10 != 3": 1,
+		"b = 10 <> 3": 1,
 		"b = 10  < 3": 0,
 		"b = 10 <= 3": 0,
 		"b = 10 == 3": 0,
diff --git a/lang/token/list.go b/lang/token/list.go
index 4ea4afb..2fca633 100644
--- a/lang/token/list.go
+++ b/lang/token/list.go
@@ -659,7 +659,7 @@
 	IDTildeSatPlus:   "~sat+",
 	IDTildeSatMinus:  "~sat-",
 
-	IDNotEq:       "!=",
+	IDNotEq:       "<>",
 	IDLessThan:    "<",
 	IDLessEq:      "<=",
 	IDEqEq:        "==",
@@ -954,6 +954,7 @@
 	'}': IDCloseCurly,
 
 	',': IDComma,
+	'!': IDExclam,
 	'?': IDQuestion,
 	':': IDColon,
 	';': IDSemicolon,
@@ -975,10 +976,6 @@
 		{".", IDDotDot},
 		{"", IDDot},
 	},
-	'!': {
-		{"=", IDNotEq},
-		{"", IDExclam},
-	},
 	'&': {
 		{"=", IDAmpEq},
 		{"", IDAmp},
@@ -1020,6 +1017,7 @@
 		{"<=", IDShiftLEq},
 		{"<", IDShiftL},
 		{"=", IDLessEq},
+		{">", IDNotEq},
 		{"", IDLessThan},
 	},
 	'>': {
diff --git a/std/deflate/decode_deflate.wuffs b/std/deflate/decode_deflate.wuffs
index ce43f78..d5dd5dd 100644
--- a/std/deflate/decode_deflate.wuffs
+++ b/std/deflate/decode_deflate.wuffs
@@ -259,14 +259,14 @@
 	// TODO: make this "if" into a function invariant?
 	//
 	// Ditto for decode_huffman_slow and decode_huffman_fast.
-	if (this.n_bits >= 8) or ((this.bits >> (this.n_bits & 7)) != 0) {
+	if (this.n_bits >= 8) or ((this.bits >> (this.n_bits & 7)) <> 0) {
 		return "#internal error: inconsistent n_bits"
 	}
 	this.n_bits = 0
 	this.bits = 0
 
 	length = args.src.read_u32le?()
-	if (length.low_bits(n:16) + length.high_bits(n:16)) != 0xFFFF {
+	if (length.low_bits(n:16) + length.high_bits(n:16)) <> 0xFFFF {
 		return "#inconsistent stored block length"
 	}
 	length = length.low_bits(n:16)
@@ -414,7 +414,7 @@
 		}
 		// For H-CL, there should be no redirections and all symbols should be
 		// literals.
-		if (table_entry >> 24) != 0x80 {
+		if (table_entry >> 24) <> 0x80 {
 			return "#internal error: inconsistent Huffman decoder state"
 		}
 		table_entry = (table_entry >> 8) & 0xFF
@@ -477,7 +477,7 @@
 		}
 	}
 
-	if i != (n_lit + n_dist) {
+	if i <> (n_lit + n_dist) {
 		return "#bad Huffman code length count"
 	}
 	if this.code_lengths[256] == 0 {
@@ -588,7 +588,7 @@
 		remaining -= counts[i] as base.u32
 		i += 1
 	}
-	if remaining != 0 {
+	if remaining <> 0 {
 		// TODO: when is a degenerate Huffman table valid?
 		return "#bad Huffman code (under-subscribed)"
 	}
@@ -649,7 +649,7 @@
 		if i < args.n_codes0 {
 			return "#internal error: inconsistent Huffman decoder state"
 		}
-		if this.code_lengths[i] != 0 {
+		if this.code_lengths[i] <> 0 {
 			if offsets[this.code_lengths[i] & 15] >= 320 {
 				return "#internal error: inconsistent Huffman decoder state"
 			}
@@ -668,7 +668,7 @@
 	while true,
 		inv n_symbols <= 288,
 	{
-		if counts[min_cl] != 0 {
+		if counts[min_cl] <> 0 {
 			break
 		}
 		if min_cl >= 9 {
@@ -680,7 +680,7 @@
 	while true,
 		inv n_symbols <= 288,
 	{
-		if counts[max_cl] != 0 {
+		if counts[max_cl] <> 0 {
 			break
 		}
 		if max_cl <= 1 {
@@ -709,7 +709,7 @@
 	//  - this.huffs[0][0b01111] = 0x80000305 (literal, symbols[8]=0x03, code_length=5)
 	//  - this.huffs[0][0b11111] = 0x80001805 (literal, symbols[9]=0x18, code_length=5)
 	i = 0
-	if (n_symbols != (offsets[max_cl] as base.u32)) or (n_symbols != (offsets[15] as base.u32)) {
+	if (n_symbols <> (offsets[max_cl] as base.u32)) or (n_symbols <> (offsets[15] as base.u32)) {
 		return "#internal error: inconsistent Huffman decoder state"
 	}
 	if (args.n_codes0 + (symbols[0] as base.u32)) >= 320 {
@@ -753,7 +753,7 @@
 
 			redirect_key = (key >> cl) & 511
 			key = key.low_bits(n:cl)
-			if prev_redirect_key != redirect_key {
+			if prev_redirect_key <> redirect_key {
 				prev_redirect_key = redirect_key
 
 				// Calculate the number of bits needed for the 2nd level table.
diff --git a/std/deflate/decode_huffman_fast.wuffs b/std/deflate/decode_huffman_fast.wuffs
index 53e4672..a459373 100644
--- a/std/deflate/decode_huffman_fast.wuffs
+++ b/std/deflate/decode_huffman_fast.wuffs
@@ -34,7 +34,7 @@
 	var hlen               base.u32[..0x7FFF]
 	var hdist              base.u32
 
-	if (this.n_bits >= 8) or ((this.bits >> (this.n_bits & 7)) != 0) {
+	if (this.n_bits >= 8) or ((this.bits >> (this.n_bits & 7)) <> 0) {
 		return "#internal error: inconsistent n_bits"
 	}
 
@@ -97,18 +97,18 @@
 		bits >>= table_entry_n_bits
 		n_bits -= table_entry_n_bits
 
-		if (table_entry >> 31) != 0 {
+		if (table_entry >> 31) <> 0 {
 			// Literal.
 			args.dst.write_fast_u8!(x:((table_entry >> 8) & 0xFF) as base.u8)
 			continue:loop
-		} else if (table_entry >> 30) != 0 {
+		} else if (table_entry >> 30) <> 0 {
 			// No-op; code continues past the if-else chain.
 			assert args.src.available() >= 8
-		} else if (table_entry >> 29) != 0 {
+		} else if (table_entry >> 29) <> 0 {
 			// End of block.
 			this.end_of_block = true
 			break:loop
-		} else if (table_entry >> 28) != 0 {
+		} else if (table_entry >> 28) <> 0 {
 			// Redirect.
 
 			// Ensure that we have at least 15 bits of input.
@@ -139,19 +139,19 @@
 			bits >>= table_entry_n_bits
 			n_bits -= table_entry_n_bits
 
-			if (table_entry >> 31) != 0 {
+			if (table_entry >> 31) <> 0 {
 				// Literal.
 				args.dst.write_fast_u8!(x:((table_entry >> 8) & 0xFF) as base.u8)
 				continue:loop
-			} else if (table_entry >> 30) != 0 {
+			} else if (table_entry >> 30) <> 0 {
 				// No-op; code continues past the if-else chain.
-			} else if (table_entry >> 29) != 0 {
+			} else if (table_entry >> 29) <> 0 {
 				// End of block.
 				this.end_of_block = true
 				break:loop
-			} else if (table_entry >> 28) != 0 {
+			} else if (table_entry >> 28) <> 0 {
 				return "#internal error: inconsistent Huffman decoder state"
-			} else if (table_entry >> 27) != 0 {
+			} else if (table_entry >> 27) <> 0 {
 				return "#bad Huffman code"
 			} else {
 				return "#internal error: inconsistent Huffman decoder state"
@@ -160,7 +160,7 @@
 			// Once again, redundant but explicit assertions.
 			assert args.src.available() >= 8
 
-		} else if (table_entry >> 27) != 0 {
+		} else if (table_entry >> 27) <> 0 {
 			return "#bad Huffman code"
 		} else {
 			return "#internal error: inconsistent Huffman decoder state"
@@ -257,7 +257,7 @@
 		}
 
 		// For H-D, all symbols should be base_number + extra_bits.
-		if (table_entry >> 24) != 0x40 {
+		if (table_entry >> 24) <> 0x40 {
 			if (table_entry >> 24) == 0x08 {
 				return "#bad Huffman code"
 			}
@@ -396,7 +396,7 @@
 	this.bits = bits & (((1 as base.u32) << n_bits) - 1)
 	this.n_bits = n_bits
 
-	if (this.n_bits >= 8) or ((this.bits >> this.n_bits) != 0) {
+	if (this.n_bits >= 8) or ((this.bits >> this.n_bits) <> 0) {
 		return "#internal error: inconsistent n_bits"
 	}
 }
diff --git a/std/deflate/decode_huffman_slow.wuffs b/std/deflate/decode_huffman_slow.wuffs
index c3a7137..39385fa 100644
--- a/std/deflate/decode_huffman_slow.wuffs
+++ b/std/deflate/decode_huffman_slow.wuffs
@@ -38,7 +38,7 @@
 	// decode_huffman_*.wuffs files as small as possible, while retaining both
 	// correctness and performance.
 
-	if (this.n_bits >= 8) or ((this.bits >> (this.n_bits & 7)) != 0) {
+	if (this.n_bits >= 8) or ((this.bits >> (this.n_bits & 7)) <> 0) {
 		return "#internal error: inconsistent n_bits"
 	}
 
@@ -64,17 +64,17 @@
 			n_bits += 8
 		}
 
-		if (table_entry >> 31) != 0 {
+		if (table_entry >> 31) <> 0 {
 			// Literal.
 			args.dst.write_u8?(x:((table_entry >> 8) & 0xFF) as base.u8)
 			continue:loop
-		} else if (table_entry >> 30) != 0 {
+		} else if (table_entry >> 30) <> 0 {
 			// No-op; code continues past the if-else chain.
-		} else if (table_entry >> 29) != 0 {
+		} else if (table_entry >> 29) <> 0 {
 			// End of block.
 			this.end_of_block = true
 			break:loop
-		} else if (table_entry >> 28) != 0 {
+		} else if (table_entry >> 28) <> 0 {
 			// Redirect.
 			redir_top = (table_entry >> 8) & 0xFFFF
 			redir_mask = ((1 as base.u32) << ((table_entry >> 4) & 0x0F)) - 1
@@ -96,25 +96,25 @@
 				n_bits += 8
 			}
 
-			if (table_entry >> 31) != 0 {
+			if (table_entry >> 31) <> 0 {
 				// Literal.
 				args.dst.write_u8?(x:((table_entry >> 8) & 0xFF) as base.u8)
 				continue:loop
-			} else if (table_entry >> 30) != 0 {
+			} else if (table_entry >> 30) <> 0 {
 				// No-op; code continues past the if-else chain.
-			} else if (table_entry >> 29) != 0 {
+			} else if (table_entry >> 29) <> 0 {
 				// End of block.
 				this.end_of_block = true
 				break:loop
-			} else if (table_entry >> 28) != 0 {
+			} else if (table_entry >> 28) <> 0 {
 				return "#internal error: inconsistent Huffman decoder state"
-			} else if (table_entry >> 27) != 0 {
+			} else if (table_entry >> 27) <> 0 {
 				return "#bad Huffman code"
 			} else {
 				return "#internal error: inconsistent Huffman decoder state"
 			}
 
-		} else if (table_entry >> 27) != 0 {
+		} else if (table_entry >> 27) <> 0 {
 			return "#bad Huffman code"
 		} else {
 			return "#internal error: inconsistent Huffman decoder state"
@@ -180,7 +180,7 @@
 		}
 
 		// For H-D, all symbols should be base_number + extra_bits.
-		if (table_entry >> 24) != 0x40 {
+		if (table_entry >> 24) <> 0x40 {
 			if (table_entry >> 24) == 0x08 {
 				return "#bad Huffman code"
 			}
@@ -287,7 +287,7 @@
 	this.bits = bits
 	this.n_bits = n_bits
 
-	if (this.n_bits >= 8) or ((this.bits >> (this.n_bits & 7)) != 0) {
+	if (this.n_bits >= 8) or ((this.bits >> (this.n_bits & 7)) <> 0) {
 		return "#internal error: inconsistent n_bits"
 	}
 }
diff --git a/std/gif/decode_gif.wuffs b/std/gif/decode_gif.wuffs
index a6f8f65..38b8271 100644
--- a/std/gif/decode_gif.wuffs
+++ b/std/gif/decode_gif.wuffs
@@ -146,7 +146,7 @@
 		(this.frame_rect_x1 == this.width) and
 		(this.frame_rect_y1 == this.height)
 
-	if args.dst != nullptr {
+	if args.dst <> nullptr {
 		// TODO: a Wuffs (not just C) name for the
 		// WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_BINARY magic pixfmt constant.
 		args.dst.set!(
@@ -217,7 +217,7 @@
 	if not this.end_of_data {
 		if this.call_sequence == 0 {
 			this.decode_image_config?(dst:nullptr, src:args.src)
-		} else if this.call_sequence != 1 {
+		} else if this.call_sequence <> 1 {
 			if this.call_sequence == 2 {
 				this.skip_frame?(src:args.src)
 			}
@@ -236,7 +236,7 @@
 		blend = 2  // 2 is WUFFS_BASE__ANIMATION_BLEND__OPAQUE.
 	}
 
-	if args.dst != nullptr {
+	if args.dst <> nullptr {
 		args.dst.update!(bounds:this.util.make_rect_ie_u32(
 			min_incl_x:this.frame_rect_x0.min(x:this.width),
 			min_incl_y:this.frame_rect_y0.min(x:this.height),
@@ -258,7 +258,7 @@
 
 	// Skip the optional Local Color Table, 3 bytes (RGB) per entry.
 	flags = args.src.read_u8?()
-	if (flags & 0x80) != 0 {
+	if (flags & 0x80) <> 0 {
 		args.src.skip?(n:(3 as base.u32) << (1 + (flags & 0x07)))
 	}
 	// Skip the literal width.
@@ -272,7 +272,7 @@
 
 // TODO: honor args.opts.
 pub func decoder.decode_frame?(dst ptr base.pixel_buffer, src base.io_reader, workbuf slice base.u8, opts nptr base.decode_frame_options) {
-	if this.call_sequence != 2 {
+	if this.call_sequence <> 2 {
 		this.decode_frame_config?(dst:nullptr, src:args.src)
 	}
 	this.decode_id_part1?(dst:args.dst, src:args.src)
@@ -298,7 +298,7 @@
 
 	if not this.restarted {
 		this.frame_config_io_position = args.src.position()
-	} else if this.frame_config_io_position != args.src.position() {
+	} else if this.frame_config_io_position <> args.src.position() {
 		return base."#bad restart"
 	} else {
 		this.restarted = false
@@ -331,8 +331,8 @@
 		c[i] = args.src.read_u8?()
 		i += 1
 	}
-	if (c[0] != 0x47) or (c[1] != 0x49) or (c[2] != 0x46) or (c[3] != 0x38) or
-		((c[4] != 0x37) and (c[4] != 0x39)) or (c[5] != 0x61) {
+	if (c[0] <> 0x47) or (c[1] <> 0x49) or (c[2] <> 0x46) or (c[3] <> 0x38) or
+		((c[4] <> 0x37) and (c[4] <> 0x39)) or (c[5] <> 0x61) {
 		return "#bad header"
 	}
 }
@@ -353,7 +353,7 @@
 	args.src.skip?(n:2)
 
 	// Read the optional Global Color Table.
-	if (flags & 0x80) != 0 {
+	if (flags & 0x80) <> 0 {
 		num_palette_entries = (1 as base.u32) << (1 + (flags & 0x07))
 		i = 0
 		while i < num_palette_entries {
@@ -444,7 +444,7 @@
 		// as per:
 		//  - http://www.vurdalakov.net/misc/gif/animexts-looping-application-extension
 		//  - http://www.vurdalakov.net/misc/gif/netscape-looping-application-extension
-		if block_size != 11 {
+		if block_size <> 11 {
 			args.src.skip?(n:block_size as base.u32)
 			break
 		}
@@ -453,8 +453,8 @@
 		block_size = 0  // Re-purpose the block_size variable as a counter.
 		while block_size < 11 {
 			c = args.src.read_u8?()
-			not_animexts = not_animexts or (c != animexts1dot0[block_size])
-			not_netscape = not_netscape or (c != netscape2dot0[block_size])
+			not_animexts = not_animexts or (c <> animexts1dot0[block_size])
+			not_netscape = not_netscape or (c <> netscape2dot0[block_size])
 			block_size += 1
 		}
 		if not_animexts and not_netscape {
@@ -464,12 +464,12 @@
 		// Those 11 bytes should be followed by 0x03, 0x01 and then the loop
 		// count.
 		block_size = args.src.read_u8?()
-		if block_size != 3 {
+		if block_size <> 3 {
 			args.src.skip?(n:block_size as base.u32)
 			break
 		}
 		c = args.src.read_u8?()
-		if c != 0x01 {
+		if c <> 0x01 {
 			args.src.skip?(n:2)
 			break
 		}
@@ -505,12 +505,12 @@
 		return "#bad graphic control"
 	}
 	c = args.src.read_u8?()
-	if c != 4 {
+	if c <> 4 {
 		return "#bad graphic control"
 	}
 
 	flags = args.src.read_u8?()
-	this.gc_has_transparent_index = (flags & 0x01) != 0
+	this.gc_has_transparent_index = (flags & 0x01) <> 0
 
 	// Convert the disposal method from GIF's wire format to Wuffs constants.
 	//
@@ -536,7 +536,7 @@
 	this.gc_transparent_index = args.src.read_u8?()
 
 	c = args.src.read_u8?()
-	if c != 0 {
+	if c <> 0 {
 		return "#bad graphic control"
 	}
 	this.seen_graphic_control = true
@@ -584,7 +584,7 @@
 	var lw                  base.u8
 
 	flags = args.src.read_u8?()
-	if (flags & 0x40) != 0 {
+	if (flags & 0x40) <> 0 {
 		this.interlace = 4
 	} else {
 		this.interlace = 0
@@ -592,7 +592,7 @@
 
 	// Read the optional Local Color Table.
 	this.which_palette = 1
-	if (flags & 0x80) != 0 {
+	if (flags & 0x80) <> 0 {
 		num_palette_entries = (1 as base.u32) << (1 + (flags & 0x07))
 		i = 0
 		while i < num_palette_entries {
@@ -762,8 +762,8 @@
 	this.compressed_wi = 0
 
 	if (this.dst_y < this.frame_rect_y1) and
-		(this.frame_rect_x0 != this.frame_rect_x1) and
-		(this.frame_rect_y0 != this.frame_rect_y1) {
+		(this.frame_rect_x0 <> this.frame_rect_x1) and
+		(this.frame_rect_y0 <> this.frame_rect_y1) {
 		return base."#not enough data"
 	}
 }
@@ -856,7 +856,7 @@
 			continue
 		}
 
-		if src_ri != args.src.length() {
+		if src_ri <> args.src.length() {
 			return "#internal error: inconsistent ri/wi"
 		}
 		break
diff --git a/std/gzip/decode_gzip.wuffs b/std/gzip/decode_gzip.wuffs
index ff8302c..297b191 100644
--- a/std/gzip/decode_gzip.wuffs
+++ b/std/gzip/decode_gzip.wuffs
@@ -54,15 +54,15 @@
 
 	// Read the header.
 	c = args.src.read_u8?()
-	if c != 0x1F {
+	if c <> 0x1F {
 		return "#bad header"
 	}
 	c = args.src.read_u8?()
-	if c != 0x8B {
+	if c <> 0x8B {
 		return "#bad header"
 	}
 	c = args.src.read_u8?()
-	if c != 0x08 {
+	if c <> 0x08 {
 		return "#bad compression method"
 	}
 	flags = args.src.read_u8?()
@@ -70,7 +70,7 @@
 	args.src.skip?(n:6)
 
 	// Handle FEXTRA.
-	if (flags & 0x04) != 0 {
+	if (flags & 0x04) <> 0 {
 		xlen = args.src.read_u16le?()
 		args.src.skip?(n:xlen as base.u32)
 	}
@@ -80,7 +80,7 @@
 	// TODO: API for returning the header's FNAME field. This might require
 	// converting ISO 8859-1 to UTF-8. We may also want to cap the UTF-8
 	// filename length to NAME_MAX, which is 255.
-	if (flags & 0x08) != 0 {
+	if (flags & 0x08) <> 0 {
 		while true {
 			c = args.src.read_u8?()
 			if c == 0 {
@@ -90,7 +90,7 @@
 	}
 
 	// Handle FCOMMENT.
-	if (flags & 0x10) != 0 {
+	if (flags & 0x10) <> 0 {
 		while true {
 			c = args.src.read_u8?()
 			if c == 0 {
@@ -100,12 +100,12 @@
 	}
 
 	// Handle FHCRC.
-	if (flags & 0x02) != 0 {
+	if (flags & 0x02) <> 0 {
 		args.src.skip?(n:2)
 	}
 
 	// Reserved flags bits must be zero.
-	if (flags & 0xE0) != 0 {
+	if (flags & 0xE0) <> 0 {
 		return "#bad encoding flags"
 	}
 
@@ -125,7 +125,7 @@
 	checksum_want = args.src.read_u32le?()
 	decoded_length_want = args.src.read_u32le?()
 	if (not this.ignore_checksum) and
-		((checksum_got != checksum_want) or (decoded_length_got != decoded_length_want)) {
+		((checksum_got <> checksum_want) or (decoded_length_got <> decoded_length_want)) {
 		return "#bad checksum"
 	}
 }
diff --git a/std/lzw/decode_lzw.wuffs b/std/lzw/decode_lzw.wuffs
index 159287f..7f3698c 100644
--- a/std/lzw/decode_lzw.wuffs
+++ b/std/lzw/decode_lzw.wuffs
@@ -204,7 +204,7 @@
 				lm1_a = (this.lm1s[prev_code] ~mod+ 1) & 4095
 				this.lm1s[save_code] = lm1_a
 
-				if (lm1_a % 8) != 0 {
+				if (lm1_a % 8) <> 0 {
 					this.prefixes[save_code] = this.prefixes[prev_code]
 					this.suffixes[save_code] = this.suffixes[prev_code]
 					this.suffixes[save_code][lm1_a % 8] = code as base.u8
@@ -277,7 +277,7 @@
 				lm1_b = (this.lm1s[prev_code] ~mod+ 1) & 4095
 				this.lm1s[save_code] = lm1_b
 
-				if (lm1_b % 8) != 0 {
+				if (lm1_b % 8) <> 0 {
 					this.prefixes[save_code] = this.prefixes[prev_code]
 					this.suffixes[save_code] = this.suffixes[prev_code]
 					this.suffixes[save_code][lm1_b % 8] = first_byte
@@ -310,7 +310,7 @@
 
 	// Rewind args.src, if we're not in "$short read" and we've read too many
 	// bits.
-	if this.read_from_return_value != 2 {
+	if this.read_from_return_value <> 2 {
 		while n_bits >= 8 {
 			n_bits -= 8
 			if args.src.can_undo_byte() {
diff --git a/std/zlib/decode_zlib.wuffs b/std/zlib/decode_zlib.wuffs
index 5267121..b7b5817 100644
--- a/std/zlib/decode_zlib.wuffs
+++ b/std/zlib/decode_zlib.wuffs
@@ -51,16 +51,16 @@
 	var checksum_want base.u32
 
 	x = args.src.read_u16be?()
-	if ((x >> 8) & 0x0F) != 0x08 {
+	if ((x >> 8) & 0x0F) <> 0x08 {
 		return "#bad compression method"
 	}
 	if (x >> 12) > 0x07 {
 		return "#bad compression window size"
 	}
-	if (x & 0x20) != 0 {
+	if (x & 0x20) <> 0 {
 		return "#TODO: unsupported preset dictionary"
 	}
-	if (x % 31) != 0 {
+	if (x % 31) <> 0 {
 		return "#bad parity check"
 	}
 
@@ -77,7 +77,7 @@
 		yield? status
 	}
 	checksum_want = args.src.read_u32be?()
-	if (not this.ignore_checksum) and (checksum_got != checksum_want) {
+	if (not this.ignore_checksum) and (checksum_got <> checksum_want) {
 		return "#bad checksum"
 	}
 }
