View Single Post
Old 20 August 2015, 21:01   #239
68k wisdom
meynaf's Avatar
Join Date: Nov 2007
Location: Lyon (France)
Age: 43
Posts: 1,932
Originally Posted by Megol View Post
MOVEM is only complicated in that it uses a special format to indicate registers to store/load. Otherwise it consists of straight stores/loads using increment or decrement mode. This is handled with a sequencer in parallel with the decoder.
So once MOVEM.L is done, doing MOVEM.W is peanuts ? (As the special format is what's tough here, when you have it, you can reuse it, right ?)

Originally Posted by Megol View Post
MOVEP in comparison require splitting/concatenation of register data, something not used elsewhere in the design. This means either one have to complicate the cache access path or use µops+a temporal register to handle that. It also stores/loads bytes while increasing the address by two so this requires special handling.
But many instructions are in this case. They require a special handling that's not reused elsewhere, e.g. DIV is in this case.
Others like LINK need to use several µops.

Of course if the problem comes from the total number of subops you have (i.e. the total for all instructions), i can understand it becomes a big problem.

Originally Posted by Megol View Post
In short MOVEP touches more critical spots than MOVEM. For a speed demon design this can be a huge problem.
MOVEM needs to be reasonably fast, while MOVEP does not. Isn't it easier when it can be slow ?
Basically it's just a bunch of shift + move.b, and these already exist in the cpu. It's not like if we want it to run in 1 clock.
meynaf is offline  
Page generated in 0.10179 seconds with 9 queries