### 2-10 Decoding a
"Zero Means 2**n" Field

Sometimes a 0 or negative value does not make
much sense for a quantity, so it is encoded in an n-bit
field with a 0 value being understood to mean 2^{n},
and a non-zero value having its normal binary interpretation. An example is the
length field of PowerPC's load string word immediate
(`lswi`) instruction, which occupies five bits. It is not useful to have an
instruction that loads zero bytes, when the length is an immediate quantity,
but it is definitely useful to be able to load 32 bytes. The length field could
be encoded with values from 0 to 31 denoting lengths from 1 to 32, but the
"zero means 32" convention results in simpler logic when the
processor must also support a corresponding instruction with a variable
(in-register) length that employs straight binary encoding (e.g., PowerPC's `lswx`
instruction).

It is trivial to encode an integer in the
range 1 to 2^{n} into the "zero
means 2^{n}" encoding梥imply mask
the integer with 2^{n} - 1. To do the
decoding without a test-and-branch is not quite as simple, but below are some
possibilities (no doubt overdone), illustrated for a 3-bit field. They all
require three instructions, not counting possible loads of constants.