common c data types.
int long ptr Examples
16 16 PDP- 11 unix
(early, 1973)
16 32 16 IP16L32 PDP- 11 unix (later, 1977)
Multiple instructions for long
16 32 32 I16LP32 Early MC68000 (1982)
Apple Macintosh 68 KB Microsoft operating systems (plus extras for X86 segments)
32 32 32 IBM 370; vAX unix; many workstations
32 32 32 64 Amdahl; Convex; 1990s unix systems
Like IP15L32, for same reason; multiple instructions for long long.
32 32 32 64 LLP64or MicrosoftWin64
IL32LLP64 or
P64
32
32
32 *( 64) LP64 or Most 64/32 unix systems
I32LP64
64 32 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
IP16
ILP32
ILP32LL or
ILP32LL64
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.
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- bit systems:
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.
intel 80386, 32-bit, with support for 8086 mode
apple mac ii
MC68020’s
32-bit addressing causes
trouble for some
MC68000 software
iBm Esa/370 multiple 31-bit address spaces per user, although complex; 24-bit still there
ansi c (“C89”) effort had started in 1983, AnSI X3j11
References:
Archives