Speaking as someone who has worked on OS and I/O subsystem development for more than 45 years, I wholeheartedly agree with the comments and observations posted by Brent Longborough. I've always found the style of invoking some function and depending upon the Condition Code upon return to be worse than just smelly. If, during the course of a code review, the more seasoned folks on my development team encountered that style, the code was rejected and it was required to be reworked.
I'm also not a big fan of the "vectored returns" (e.g., B 0(,R14) for one condition, B 4(,R14) for another, etc.). Among other things, this introduces an undesirable dependency upon the size of the instruction(s) following the linkage instruction in the caller's code. Return Codes and Reason Codes (typically in R15 and R0, respectively) work quite nicely and are much more maintainable. Of course, nothing is perfect and developers need to be very much aware of what they are doing and what kind of a mess (or hopefully, lack thereof) they are leaving for the next individual who has to work on the code. Bob