Skip to content

Commit 622d988

Browse files
committed
add "Intel's original 64bit extensions for x86" article
1 parent b0fd57c commit 622d988

File tree

5 files changed

+68
-0
lines changed

5 files changed

+68
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
---
2+
title: "Intel's original 64bit extensions for x86"
3+
date: 2025-09-27
4+
---
5+
6+
#### Introduction
7+
8+
In the late 1900s, Intel was fully invested in Itanium (IA-64) being their future 64bit architecture.
9+
10+
At that time (allegedly around 1997-1998), some Intel engineers – who were more cautious than their management – built a
11+
64bit extension for their x86 processors as a backstop. It never shipped:
12+
13+
> Intel’s Pentium 4 had our own internal version of x86–64. But you could not use it: we were forced to “fuse it off”,
14+
> meaning that even though the functionality was in there, it could not be exercised by a user.
15+
> This was a marketing decision by Intel — they believed, probably rightly, that bringing out a new 64-bit feature in
16+
> the x86 would be perceived as betting against their own native-64-bit Itanium, and might well severely damage Itanium’s
17+
> chances.
18+
> – Bob Colwell[^colwell]
19+
20+
AMD announced AMD64, their own 64bit extension to x86, in 1999 (and shipped it in 2003),
21+
condemning both Itanium and Intel's own x86 extension to obscurity.
22+
23+
Intel implemented AMD's design in _Project Yamhill_ and shipped its first processors with AMD64 in 2004.
24+
25+
#### How did Intel's design look like?
26+
27+
While AMD's 64bit extension design that repurposed inc/dec instructions as the REX prefix is well-documented,
28+
there is very little known about Intel's own 64bit extension design.
29+
30+
Here is what can be reconstructed from Intel's patent applications from 2000 and 2003[^patents]:
31+
32+
> An instruction having [a] format [...] — where the mode field is `01B`, the R/M field is `100B`, the index field is `100B`
33+
> — has addressing mode information that is currently unsupported in the IA-32 architecture regardless of the value of the
34+
> scale field.
35+
> An instruction of [that] format [...] thereby includes heretofore unused bit fields (e.g., the two bits of scale field,
36+
> bits of displacement, etc.), that can support an expanded logical register set for existing instructions formats and
37+
> legacy operands.
38+
39+
![US7363476B2-image03.png](/assets/img/US7363476B2-image03.png)
40+
41+
Material from the Bristol Community College[^bristol] also mentions this specific combination of bits:
42+
43+
> Note that this addressing mode does not allow the use of the **ESP** register as an index register.
44+
> Presumably, Intel left this particular mode undefined to provide the ability to extend the addressing modes in a future version of the CPU.
45+
46+
#### Differences from AMD64
47+
48+
AMD's [REX prefix](x86-prefixes-and-escape-opcodes-flowchart) introduced 1 bit `R` to extend the 3-bit register to 4 bits,
49+
allowing access to 16 registers.
50+
The prefix also added 1 bit `W` to extend operand size, 1 bit `X` to extend SIB byte's index and 1 bit `B` to extend SIB byte's base.
51+
52+
Intel's approach would have added 2 additional bits to the existing 3-bit register encoding, and introduced a second, additional 5-bit register encoding.
53+
It appears this encoding would have provided a future expansion possibility to 32 registers, even if the implementation may have been limited to 16 registers at first.
54+
55+
It is unclear what the equivalent of (or the alternative to) AMD64's `W`, `X` and `B` bits would have been under Intel's design.
56+
57+
#### Conclusion
58+
59+
Sadly, there is no definitive information on how close the patents were to what was shipped (fused-off) in Intel
60+
processors of that specific time period.
61+
62+
[^colwell]: [Bob Colwell's answer and comments](https://www.quora.com/How-was-AMD-able-to-beat-Intel-in-delivering-the-first-x86-64-instruction-set-Was-Intel-too-distracted-by-the-Itanium-project-If-so-why-Shouldn-t-Intel-with-its-vast-resources-have-been-able-to-develop-both)
63+
[^patents]: [US6625724B1](https://worldwide.espacenet.com/patent/search?q=pn%3DUS6625724B1) and [US7363476B2](https://worldwide.espacenet.com/patent/search?q=pn%3DUS7363476B2)
64+
[^bristol]: [CIS-77 Introduction to Computer Systems – Instruction Set Architecture Design – Scaled Indexed Addressing Mode](https://www-user.tu-chemnitz.de/~heha/hsn/chm/x86.chm/x86.htm#8)

_sass/base/_base.scss

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,9 @@ q {
267267
blockquote {
268268
background-color: var(--background-color-quote);
269269
margin-left: var(--base-line);
270+
margin-right: var(--base-line);
270271
padding-left: calc(var(--base-line) / 2);
272+
padding-right: calc(var(--base-line) / 2);
271273
border-left: 2px solid var(--color-grey-medium);
272274
> :last-child {
273275
margin-bottom: 0;

_sass/object/_posts.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
font-style: italic;
1212
}
1313
img {
14+
display: block;
1415
margin: 0.5em auto 0;
1516
}
1617
}

assets/img/US7363476B2-image03.png

159 KB
Loading

index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ navigation: true
192192
<th class="table-topic">Interfaces</th>
193193
<td>
194194
<div><a href="interfaces/x86-prefixes-and-escape-opcodes-flowchart">x86 prefix & escape flowchart</a></div>
195+
<div><a href="interfaces/intels-original-64bit-extensions-for-x86">Intel's original 64bit extensions for x86</a></div>
195196
<div><a href="interfaces/improving-the-xfce-settings-ui">Improving the XFCE Settings UI</a></div>
196197
</td>
197198
<td>

0 commit comments

Comments
 (0)