On Fri, 2006-05-19 at 09:01 -0400, Jerry Feldman wrote:
Actually, the x86_64 bit version of an application is built for 64-bit virtual. The 48-bit/52-bit PAE is applicable when talking about the OS's virtual memory manager, paging, and TLBs. An application built for x86_64 (or Alpha or IA64) will have a full 64-bit virtual memory address space
That's the standard programmer line.
But the binary is very much built _explicitly_ for 48-bit/52-bit PAE. We don't know if they will run if and when AMD implements a _true_ "flat" 64-bit mode. If you read the fine print in AMD's own manual, it doesn't exist yet. Again, the binaries built by the compiler use a flat 64-bit model. Remember,
On Friday 19 May 2006 9:33 am, Bryan J. Smith wrote: that the binaries are built for virtual memory and they have a full 64-bit memory model. The general purpose register set contains 16 64-bit registers that are used for both data and for addresses. The VM provides the appropriate mapping between the virtual address and the physical address. Additionally, the binaries produced by the compiler are relocatable and contain things like relocations. The linker uses these relocations along with symbol tables to resolve link-time addresses, and produces a binary containing additional relocations. The loader then recsolves these relocations when loading a program. (Actually, the loader does a lot of mapping since, in general, only needed pages are mapped in from the executable. In general, only the OS needs to know specifically about the physical memory. The running binary (in most cases) does not really pay attention to the 48-bit/52-bit PAE model. Additionally, the Alpha had 32 64-bit general purpose registers, and a program have full 64-bit virtual addressability even though the physical addressing was limited to 48-bits or less. But, virtual memory addresses must be in canonical form.
So there's no guarantee the binaries will be compatible. That's why I differentiate. If a binary is explicitly built for features of a specific chip, it probably will not be compatible. This has always been an issue. In general, when building an application (or an OS) you build it for the target deployment. In the case of x86-64 Linux distros, you build for the generic x86-64, not to include specific AMD or Intel extensions.
as well as access to the full 64-bit registers.
Yes, non-address registers are 64-bit. There are 16 General Purpose registers that can contain either data or addresses. The program counter is also 64-bits.
There's a huge difference between what the "programmer" sees and what the "system programmer/organization" actually does, _including_ the resulting object code itself. ;-> This is true. The programmer does not concern himself with the specific memory models. The system programmer may be concerned with the underlying hardware. The application programmer sees a full 64-bit virtual environment, especially if he/she is using a high level language (including C). -- Jerry Feldman
Boston Linux and Unix user group http://www.blu.org PGP key id:C5061EA9 PGP Key fingerprint:053C 73EC 3AC1 5C44 3E14 9245 FB00 3ED5 C506 1EA9