Samurai_Crow said:
The phrase "necessary evil" means that they exist because they have to in the presence of foreign closed-source code but if there were no such thing as foreign binaries, there would be no further need of emulators.
The phrase necessary evil means that a negative expense is accepted to avoid greater expense. Emulators are not an expense, they are not evil. The term is really pretty self explanatory, so...
That aside, I find what you're saying to be severely flawed. A vast majority of things that people emulate were written for custom hardware, and a large degree of it was written at least partially in assembly language, at least not entirely. If every game made for a game console in the 80s and 90s were open source then we'd still be using emulators to play them because it'd be much less work than porting all of them. In fact, that's probably even true for some software today, although obviously we've moved towards more common ground that makes porting easier.
Samurai_Crow said:
I was talking about binary-to-binary translation on the false assumption that that was how Transmeta's Code Morphing Software worked.
You must mean something different from what can be expected by "binary to binary translation" - that usually implies machine code to machine code translation which a so-called "JIT" would be performing. If you mean translating a complete executable data file to another complete executable file, it's completely absurd to think that a processor would do that. Especially one that runs machine code for a variety of platforms, including such code which might not exist as a traditional executable file (say, boot loaders)
Samurai_Crow said:
Crusoe was not an x86 compatible but ran all of the x86 code in a JIT because it consumed less power than a true x86 back when it was made. It was based on a Very Long Instruction Word (VLIW) architecture that was a failure in CPUs but made headlines in GPUs made by other companies later on.
I am completely aware of what Crusoe was and how it worked! I think it shouldn't be possible to read my post and not be aware of this. I get the feeling that you're just skimming what I'm writing and maybe picking out a few things in isolation.
Also, what? GPUs don't use VLIW. I think you're confusing it with SIMD (which these days, some are and some aren't). Some DSPs use VLIW though (TI's C6x series is a very blatant example, but others to a more narrow degree, like Blackfin)
Samurai_Crow said:
They fetch cache rows by using burst-fetches to grab sequential sections of memory that are wider than the bus width. Sometimes they accidentally get some piece of some other section of code that came before or after the section they were fetching as a result. Most caches are multi-way set associative so they don't really care about the side effects like that. IMO every little bit counts.
Nice try, but that isn't going to be what's happening after translation because the translated code is what's going to be fetched into instruction cache, not the original code. And the translated code won't contain translated versions of code that has never been touched. Even if that weren't the case though, that's really grasping at straws because dead code (the kind you were referring to) will tend to appear in relatively large blocks, not sprinkled in the middle of live blocks.
Samurai_Crow said:
If you want an apology I'll give it to you. I'm sorry I trespassed in your thread. I was operating on false assumptions about binary-to-binary translation.
I'm not really sure what you're apologizing
for, but I would perhaps prefer it if you didn't seem to misread a lot of the things I'm typing. Not that I think that's intentional.