Sorry for my noob question, but don't bitwise operations edit the initial value, so you'd need one copy of src each for every color channel you're switching around?
#define BGR5A1_RGB5A1(src) {
scr1=scr;
scr2=scr;
scr3=scr;
((src1 & 0x7C00) >> 10) | ((src2 & 0x1F) << 10) | (src3 & 0x83E0))
}