common c data types.
int long ptr Examples
16 PDP- 11 unix
16 IP16L32 PDP- 11 unix (later, 1977)
Multiple instructions for long
32 I16LP32 Early MC68000 (1982)
Apple Macintosh 68 KB
Microsoft operating systems
(plus extras for X86
32 IBM 370; vAX unix; many workstations
64 Amdahl; Convex; 1990s unix systems
Like IP15L32, for same reason;
multiple instructions for long long.
64 LLP64or MicrosoftWin64
32 *( 64) LP64 or Most 64/32 unix systems
32 *( 64) ILP64 HAL; logical analog of ILP32
In these cases, LP64 and ILP64 offer 64-bit integers, and long long seems redundant, but in practice,
most proponents of LP64 and ILP64 included long long as well, for reasons given later. ILP64 uniquely
required a new 32-bit type, usually called _int32.
long long label
four DIMMs and could cost less than
$400, 300GB disks are widely available
for less than $1 per GB, so one would
have expected mature, widespread support for 64 bits by then. All this took
longer than perhaps it should have, however, and there have been many years
where people could buy memory but not
be able to address it conveniently, or
not be able to buy some third-party application that did, because such applications naturally lag 64-bit CPUs. It is
worth understanding why and how this
happened, even though the impending
issue was well known.
˲ For any successful computer family, it takes a very long time to convert
an installed base of hardware, and
software lasts even longer.
˲ Moving from 32 to 64/32 bits is a
long-term coexistence scenario. Unlike past transitions, almost all 64-bit
CPUs must run compatible existing
32-bit binaries without translation,
since much of the installed base remains 32-bit and a significant number of 32-bit programs are perfectly
adequate and can remain so indefinitely.
software is harder
Building a 64-bit CPU is not enough.
Embedded-systems markets can move
easier than general-purpose markets,
as happened, for example, with Cisco
routers and Nintendo N64s that used
64-bit MIPS chips. Vendors of most 32-
bit systems, however, had to make their
way through all of the following steps to
produce useful upward-compatible 64-
1. Ship systems with 64/32 CPUs,
probably running in 32-bit mode. Continue supporting 32-bit-only CPUs as
long as they are shipped and for years
thereafter (often five or more years).
Most vendors did this, simply because
software takes time.
2. Choose a 64-bit programming
model for C, C++, and other languages.
This involves discussion with standards
bodies and consultation with competitors. There may be serious consequences if you select a different model from
most of your competitors. Unix vendors
and Microsoft did choose differently,
for plausible reasons. Think hard about
inter-language issues—Fortran expects
INTEGER and REAL to be the same
size, which makes 64-bit default integers awkward.
3. Clean up header files, carefully.
4. Build compilers to generate 64-bit
code. The compilers themselves almost
certainly run in 32-bit mode and cross-compile to 64-bit, although occasional
huge machine-generated programs
can demand compilers that run in 64-
bit mode. Note that programmer sanity normally requires a bootstrap step
here, in which the 32-bit compiler is
first modified to accept 64-bit integers
and then is recoded to use them itself.
80386, 32-bit, with
support for 8086 mode
apple mac ii
32-bit addressing causes
trouble for some
multiple 31-bit address
spaces per user, although
complex; 24-bit still there
ansi c (“C89”)
effort had started
in 1983, AnSI X3j11