diff --git a/src/code/ppc64.c b/src/code/ppc64.c index da854ad24a0ae0da8c769cd9ed7603af74ac7144..1b6dfc471c60bcf721d4638be101838828885a25 100644 --- a/src/code/ppc64.c +++ b/src/code/ppc64.c @@ -28,6 +28,20 @@ #define MAKE_TYPE_WORD(t,st) ((st)|((t)<<16)) #endif +#if _CALL_ELF == 2 + +#define ADD_CALL(X) do { \ + INT64 func_=(INT64)(void*)(X); \ + \ + SET_REG64(12, func_); \ + /* mtlr r12 */ \ + MTSPR(12, PPC_SPREG_LR); \ + /* blrl */ \ + BCLRL(20, 0); \ + } while(0) + +#else + #define ADD_CALL(X) do { \ INT64 func_=(INT64)(void*)(X); \ \ @@ -44,6 +58,8 @@ BCLRL(20, 0); \ } while(0) +#endif + int ppc64_codegen_state = 0, ppc64_codegen_last_pc = 0; static int last_prog_id=-1;