Unextended ARB_fragment_program is less powerful than the DX9 pixel shaders in its computational expressiveness (no predication at all). However, as it supports queriable limits, it may be MORE powerful in certain respects, such as number of instructions available, depending on hardware implementation.
It is still substantially more powerful than the DirectX 8(.1) level hardware. There’s a HUGE leap between 8 (which was really just a way to describe re-configurable fixed-function pipelines) and 9 (which is really a mostly full-blown assembly language).