author | pcpa <paulo.cesar.pereira.de.andrade@gmail.com> | 2014年10月24日 14:31:41 -0200 |
---|---|---|
committer | pcpa <paulo.cesar.pereira.de.andrade@gmail.com> | 2014年10月24日 14:31:41 -0200 |
commit | 0c6f675c8a026826b2482db9f978d422ef1f5328 (patch) | |
tree | 30bdd152cd6106e74ee39abcff57973133f59f9b /lib/jit_ppc.c | |
parent | 9c5e2b511ec6f80a350d756d4464acfb10373ee4 (diff) | |
download | lightning-0c6f675c8a026826b2482db9f978d422ef1f5328.tar.gz |
-rw-r--r-- | lib/jit_ppc.c | 20 |
diff --git a/lib/jit_ppc.c b/lib/jit_ppc.c index cbc5dda..8ef6119 100644 --- a/lib/jit_ppc.c +++ b/lib/jit_ppc.c @@ -778,11 +778,19 @@ _emit_code(jit_state_t *_jit) #if __powerpc__ undo.prolog_offset = 0; - /* code may start with a jump so add an initial function descriptor */ - word = _jit->pc.w + sizeof(void*) * 3; - iw(word); /* addr */ - iw(0); /* toc */ - iw(0); /* env */ + for (node = _jitc->head; node; node = node->next) + if (node->code != jit_code_label && + node->code != jit_code_note && + node->code != jit_code_name) + break; + if (node && (node->code != jit_code_prolog || + !(_jitc->functions.ptr + node->w.w)->assume_frame)) { + /* code may start with a jump so add an initial function descriptor */ + word = _jit->pc.w + sizeof(void*) * 3; + iw(word); /* addr */ + iw(0); /* toc */ + iw(0); /* env */ + } #endif #define case_rr(name, type) \ @@ -1262,7 +1270,7 @@ _emit_code(jit_state_t *_jit) } } else - jmpi(node->u.w); + (void)jmpi_p(node->u.w); break; case jit_code_callr: callr(rn(node->u.w)); |