It's nice to merge code where possible, but it's been shown to be a mistake in the past to be overzealous in merging code. Sometimes, the merged code turns into an ugly mess of if's and special cases; see some parts of Linux drm to see just how complex this can get. And, in the worst case, as people extend the merged code for newer cases, they break older cases. You've really got to be careful.
Sometimes, code is duplicated because either it has to be tweaked or people want to make sure it remains unchanged for a given part, or the part is sensitive to order of operations. There are timing or other issues that make code delicate. In the worst case (this has happened) code is changed for a common case and it works in the initial tests, and fails later, or fails later on one platform for one special case in which it used to work. That's always fun.
We've already seen with Paul's first plan how easy it would be to break a bunch of platforms with a well-intentioned code merge. This kind of mistake has happened before.
Just merging code is not necessarily virtuous. Given that the platforms work, and most of them are obsolete, it's hard to see the virtue in this change. It adds the risk of failure for what seems an academic gain in cleanliness.
ron