# Widening Integer Arithmetic

Some codes require computations to use fewer
bits of precision than are normal for the target machine.
For example, Java requires 32-bit arithmetic even on a 64-bit target.
To run narrow codes
on a wide target machine, we present a *widening* transformation.
Almost every narrow operation can be widened by sign- or
zero-extending the operands and using a target-machine instruction at
its natural width.
But extensions can sometimes be avoided, and
our transformation avoids as many as possible.
The key idea is knowing
what each
operation can accept in the high bits of its
arguments and what it can guarantee about the high
bits of its result.
This knowledge is formalized
using *fill types*, which drive the widening transformation.
## Full paper

The paper is available as
US Letter PostScript (384K),
US Letter PDF (170K),
and
US Letter TeX DVI (81K).