Wanting to make sure I'm reading the requirements correctly. Looks like this routine only needs to save the link register and env, call setjmp then restore the link register and env followed by the tail call. Hexagon was out of date so I did this: .balign 4 .type sigsetjmp,@function sigsetjmp: // if savemask is 0 sigsetjmp behaves like setjmp { p0 = cmp.eq(r1, #0) if (p0.new) jump:t ##setjmp } { memw(r0+#64+4) = r16 // save r16 in __ss[0] memw(r0+#64) = r31 // save linkregister in __fl r16 = r0 } call ##setjmp { r0 = r16 // restore r0 r31 = memw(r16+#64) // restore linkregister r16 = memw(r16+#64+4) // restore r16 from __ss[0] } .hidden __sigsetjmp_tail jump ##__sigsetjmp_tail .size sigsetjmp, .-sigsetjmp