-mfloat-abi doesn't control the calling convention for compiler-rt: it's built with the compiler, so it can only have one calling convention for a given target. -mfloat-abi does control the calling convention for any function provided by libm: libm is built by the user, so the user should have control over its calling convention. See https://bugs.llvm.org/show_bug.cgi?id=30543 for previous discussion on the subject.
I don't really like the big list, but I'm not sure there's a better way to handle this.
I think that it would be better to have a table and just walk that rather than doing this explicitly.