No, that's not how it works.
The 386 added a "mode" bit to the code segment, which made all the previously 16-bit opcodes work on 32-bit data by default if set. If you wanted the other size (than what the mode bit specified) you inserted a 66h prefix byte.
When you go into "long" mode, the default stays 32-bit, but there are prefix bytes for 16-bit and 64-bit operations if needed. There is also a prefix byte (usually the same one) to access the additional registers, since x86 only provides three bits for that.
They merely need to be recompiled if they were written correctly.
That's not how code works. The compiler sets the size of various objects at compile-time, and the code assumes that's the size the objects actually are. Due to pointer math and such, there is _no_ way to change the size of a given object after compilation. A program must _always_ remain "compatible" with itself.
However, since all you should need to do is recompile the program for 64-bit mode, that's not a big deal. That's how it works on many other OSes that support both 32- and 64-bit code.
No, of course not. It's impossible.
Might I suggest you actually learn how some common CPUs work before suggesting "improvements" to them? Your past posts indicate you don't even understand twos-complement math or even how to read a reference manual. Why waste your time (and ours) proposing changes until you actually understand what already exists?
What problem are you actually trying to solve here? It's more productive to start with that, then try to find solutions, rather than start with a solution and try to find problems it solves.
Already exists.
Compiler writers aren't asking for that, and if they are compiling for
64-bit mode they already have access to 32-bit variables when needed.No, not really.
S