Just for fun, let's argue about this. We have decided that MUX and MOV instructions are co-redundant. MOV is an obvious special case of MUX, where one source is the destination or the predicate is Always. MUX is just an abbreviation for AT MOST two MOV instructions with opposite predicates, but it can often be implemented with just a single conditional MOV if the other MUX input is already in the dest reg.
All things being equal, keeping MUX is better IN A BARREL PROCESSOR. The problem is in the non-barrel case [*]; MUX _always_ introduces two register dependencies, which can lead to more stalls. By contrast, if the predicate for a MOV instruction resolves to false, we can just drop the instruction, leading to NO stalls in the single-MOV case. We just don't want to unnecessarily keep these two instructions. Aaaaaannnnddddd... FIGHT! [*] A barrel processor issues one instruction from each thread round-robin, avoiding all branch and dependency hazards. The alternative is to switch threads only on potential stall conditions. We want to support this at least in the simulator. The tradeoffs between the two options mostly pertain to interaction with cache miss latencies on loads. -- Timothy Normand Miller, PhD Assistant Professor of Computer Science, Binghamton University http://www.cs.binghamton.edu/~millerti/ Open Graphics Project
_______________________________________________ Open-graphics mailing list [email protected] http://lists.duskglow.com/mailman/listinfo/open-graphics List service provided by Duskglow Consulting, LLC (www.duskglow.com)
