Quantcast
Channel: The Old New Thing
Browsing all 3085 articles
Browse latest View live

The Alpha AXP, part 1: Initial plunge

Since the Itanium series was such a smash hit (two whole people read it!), here's another series for a now-defunct processor architecture which Windows once supported. The next who-knows-how-many days...

View Article


Image may be NSFW.
Clik here to view.

The Alpha AXP, part 2: Integer calculations

Here are some of the integer computational operations available on the Alpha AXP. I'm going to cover only the instructions used in general-purpose programming, since that's the sort of thing you're...

View Article


The Alpha AXP, part 3: Integer constants

The Alpha AXP does not have a "load immediate 32-bit integer" instruction. If you need to load an immediate 32-bit integer, you need to use some tricks. We saw last time that loading 8-bit constants...

View Article

The Alpha AXP, part 4: Bit 15. Ugh. Bit 15.

Let's load each of the powers of two up to 2³¹, in canonical form. LDA Ra, 0x0001(zero) ; Ra = 0x00000000`00000001 ; bit 0 LDA Ra, 0x0002(zero) ; Ra = 0x00000000`00000002 ; bit 1 LDA Ra, 0x0004(zero)...

View Article

The Alpha AXP, part 5: Conditional operations and control flow

The Alpha AXP has no flags register. Conditional operations are performed based on the current value of a general-purpose register. The conditions available on the Alpha AXP are the following: EQ  if...

View Article


The Alpha AXP, part 6: Memory access, basics

The Alpha AXP has only one memory addressing mode: Indexed indirect. ; load memory to register LDL Ra, disp16(Rb) ; result is sign-extended to 64 bits LDQ Ra, disp16(Rb) ; store register to memory STL...

View Article

The Alpha AXP, part 7: Memory access, loading unaligned data

Last time, we look ed at loading aligned memory. Now we're going to look at unaligned data. Let's load an unaligned quad. The unaligned quad will span two aligned quads, so we will need to load two...

View Article

The Alpha AXP, part 8: Memory access, storing bytes and words and unaligned data

Storing a byte and word requires a series of three operations: Read the original data, modify the original data to incorporate the byte or word, then write the modified data back to memory. To assist...

View Article


The Alpha AXP, part 9: The memory model and atomic memory operations

The Alpha AXP has a notoriously weak memory model. When a processor writes to memory, the result becomes visible to other processors eventually, but there are very few constraints beyond that. For...

View Article


The Alpha AXP, part 10: Atomic updates to byte and word memory units

Today we're going to do a little exercise based on what we've learned so far. We learned how to perform byte and word loads and stores to memory. And we also learned how to perform atomic memory...

View Article

The Alpha AXP, part 11: Processor faults

There are three types of faults on the Alpha AXP: Software faults Hardware faults Arithmetic faults Software faults are those triggered by explicit instructions, such as CALL_PAL. These are calls that...

View Article

The Alpha AXP: Part 12: How you detect carry on a processor with no carry?

The Alpha AXP has no corresponding trap variant for arithmetic carry. So how would you detect carry?¹ Answer: The same way you detect carry in C, or pretty much any other programming language that...

View Article

The Alpha AXP, part 13: On treating a 64-bit processor as if it were a 32-bit...

The Alpha AXP is natively a 64-bit processor, but Windows NT for Alpha AXP treated it as a 32-bit processor. How is that possible? The Alpha AXP registers are full 64-bit registers, and you are...

View Article


Yes, that was a horrifically awkward video, but it wasn’t the Windows 95 launch

If you search YouTube for "Windows 95 launch", you'll find many copies of this video: This is commonly identified as having been recorded at the Windows 95 launch, but it wasn't. The Windows 95 launch...

View Article

The Alpha AXP, part 14: On the strange behavior of writes to the zero register

I noted early on that a special rule in the Alpha AXP is that an instruction that specifies the zero register as a destination is permitted to be completely optimized out by the processor (with two...

View Article


Image may be NSFW.
Clik here to view.

The Alpha AXP, part 15: Variadic functions

As noted in the initial plunge, the first six integer parameters are passed in registers, and the first six floating point parameters are passed in a different set of registers. So how does the callee...

View Article

The Alpha AXP, part 16: What are the dire consequences of having 32-bit...

On the Alpha AXP, 32-bit values are typically represented in so-called canonical form. But what happens if you use a non-canonical representation? Well, it depends on what instruction consumes the...

View Article


The Alpha AXP, part 17: Reconstructing a call stack

I'm going to wrap up the formal part of the series by applying the information we've been learning over the past several days weeks: We're going to reconstruct a broken stack. Suppose you have a debug...

View Article

The Alpha AXP, epilogue: A correction about file system compression on the...

Some time ago, I claimed that Windows file compression had to be dumbed down in order for the Alpha AXP to hit its performance targets. I have since been informed by somebody who worked on file system...

View Article

I guess I may as well confess that I wrote the Itanium information in the...

A long time ago in a processor architecture far, far away, mikeb commented, "the help file for the Debugging Tools for Windows package has (or maybe "had") really, really good Itanium information in...

View Article
Browsing all 3085 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>