Well, there are quite a few Amiga programs - including several of my own that all follow 100% legal programming practices (according to common sense and the RKMs) that will not run on an 060 with superscalar and/or branch caching enabled.
Are these programs all emulators?
Emulators have to do weird exotic things and/or deal with weird exotic things in order to get good performance. These weird exotic things are things that a regular programmer never deals with.
I don't recall all of the reasons behind the issues.
I am not entirely clear if your complaints about the 060 are not simply that all the first 060s had bugs in them. Later on those bugs were ironed out. Iirc at least one of the bugs only happened when was superscalar mode was active so it could be avoided by turning it off.
I am thinking that if you tried a later revision 060 you might like it.
I should go look at the mmu.library replacement that we made for EMPLANT and FUSION... I know I commented some things there.
I remembered u coded Emplant but I didn't know about Fusion. I never actually used either one. The only mac emu I ever used was A-Max (I think that is what it was called) way back in prehistoric times.
I know that self modifying code is definitely one of the things that causes a problem when one of the cached instructions in the pipeline has been modified (like a branch table). Yes, I consider self-modifying code 100% legal. You are suppose to flush the caches (or turn them off) with self modifying code, but when you do that you are then running at sub-030 speeds.
If u only modify your code once, flush the cache and go on then its not such a big deal... but if you have to do it in a loop then speed dies.
Does your Emu scan opcodes and runtime replace all those ILLEGAL instructions that MacOS used for Quickdraw etc. ?
The 060 really only adds dual instruction pipelining and a 4-way cache. A higher speed (100MHz+) 040 core would probably be better in the long run, especially if it handled floating point without completely stalling the core like the 060 does.
040 core is slow at math. 060 is fast at math. 040 has no branch prediction too.