I tend to agree that one shouldn't rely on P-II comparisons, for example, as a means of comparing integer vs floating point performance when discussing the general turf of embedded processors. Nor should one compare apples and oranges.
The OP was asking about how to IMPLEMENT floating point routines using fixed point, by the way, and this branch here is decidedly moved away from anything helpful there -- though perhaps still interesting. I'm not sure how Tim's segue comment addressed this (seems to me it was arguably on topic to suggest searching google, but otherwise boils down to telling someone that they don't need to know how to implement floating point because the support is already there 'so why ask' at all...)
I agree with your comment, "fixed point is usually chosen over floating point because of the reduced die size, cost, and power requirements of the processor." In our case, cost was certainly a consideration though not a large one (at first.) However, power requirements and dissipation were vital issues for us as well as getting the necessary processing done on time (of course.) I don't think die size directly mattered, though I'm sure that an excessively large package would have been a problem then. Package size *is* more important for some applications I work on, so that puts a more direct pressure on the die, of course.
I cannot agree with your rejoinder, though, that "Emulation of floating point math on a fixed point processor is usually not an option as the throughput is reduced by 100x or more." First off, my very first application on the ADSP-21xx from Analog Devices dealt with values that are important to maintain over a very wide dynamic range. At least 16 bits of precision had to be maintained for some
6-8 orders of magnitude, for example. Some kind of floating point features were essential, even while using a very cool running DSP like these were at the time. (What kept us from using TI integer DSPs at the time was a different issue that was inescapable with their parts and required for the application.) So floating point on a fixed point processor wasn't only an option, it was vital.One of the things that is glossed over in your comment here is that floating point processing doesn't have to be used 24/7 by the application. If it were always the case that the CPU was bottlenecked doing floating point continually, then yes -- for a given performance level you'd probably be better off with a DSP supporting floating point if you needed floating point in that way, rather than using a super-high speed integer processor and emulating it at a similar rate. But if what you need is modest bursts of floating point operations as well as very low power requirements and low cost, etc., and when you could well use the boost of a MAC or fully combinatorial barrel shifter to help it along, then an integer DSP is probably quite reasonable. The price of adding floating point in hardware is usually a continuous drain and excessive power consumption, if you don't need it all the time, and that adds unnecessary cost both to the processor and all of the surrounding circuitry and dissipation support required. Further, if your application requires a wide dynamic range, some kind of floating point support remains.
So, floating point is not only an option on integer processors.. sometimes, it is a requirement for them.
But you've make me slightly curious. I use ADSP-21xx integer DSPs routinely (not moved up to BlackFin, though) and my experience using the barrel shifter with integer operations for floating point purposes hasn't been as bad as 100:1 versus fixed point for operations that reasonably might be considered similar in precision (but not in dynamic range, of course.) But I write my own code and do NOT use libraries nor do I use C, and I use the full capability of packing instructions. Can you be precise about what you are comparing here so I can consider some specific cases just for my own sake?
Jon