+#if _CALL_ELF == 2
+_prologue(clib_calljmp)
+_gep_lep(clib_calljmp)
+ mflr 0 /* get link register into r0 */
+ std 0,16(1) /* store r0 into the stack frame */
+ stdu 1,-32(1) /* move sp down for one frame */
+ mr 12,3 /* move func pointer to r12 */
+ mr 3,4 /* pass func_arg as first arg */
+ std 1,-8(5) /* store old sp into the top of the new stack */
+ addi 5,5,-256 /* stack_addr =- 256 */
+ mr 1,5 /* set new sp */
+ mtctr 12 /* put function pointer into CTR register */
+ std 2,24(1) /* store TOC pointer into stack frame */
+ bctrl /* unconditional branch to counter register */
+ ld 2,24(1) /* load TOC pointer from stack frame */
+ addi 1,1,256 /* go back to the start of the new stack */
+ ld 1,-8(1) /* load old sp */
+ addi 1,1,32 /* move sp back to previous frame */
+ ld 0,16(1) /* get old link reg value from the stack */
+ mtlr 0 /* restore link reg value */
+ blr
+_epilogue(clib_calljmp)
+
+#else /* v1 ABI */
+
+_prologue(clib_calljmp)
+ mflr 0 /* get link register into r0 */
+ mr 9,3 /* store function pointer into the r9 */
+ std 0,16(1) /* store r0 into the stack frame */
+ stdu 1,-112(1) /* move sp down for one frame */
+ std 1,-8(5) /* store old sp into the top of the new stack */
+ addi 5,5,-256 /* stack_addr =- 256 */
+ mr 1,5 /* set new sp */