Maybe this has something to do with iOS's 64-bit vararg calling conventions being different from normal 64-bit ARM. I think we were discussing that issue on Slack once, when @lukaskollmer tried to get NSLog working on a 64-bit device.

The only reason I can think of why the argument order is so strange is that maybe _self is "early" enough in the list that it's passed as a register, and the rest of the arguments go on the stack, but somehow are in the wrong order?