Converting between different but same-sized floating-point types

If a narrowing floating-point conversion is fptrunc, and a widening one is fpext, what instruction is used for a conversion between half and bfloat? It is neither purely narrowing nor purely widening, nor is it a bitcast that just reinterprets the bits.

Similarly, what happens in the case of fp128 and ppc_fp128?