--- ocaml-4.08.0/asmcomp/power/arch.ml
+++ ocaml-4.08.0/asmcomp/power/arch.ml
@@ -28,7 +28,7 @@ type abi = ELF32 | ELF64v1 | ELF64v2
 let abi =
   match Config.model with
   | "ppc" -> ELF32
-  | "ppc64" -> ELF64v1
+  | "ppc64" -> ELF64v2
   | "ppc64le" -> ELF64v2
   | _ -> assert false
 
--- ocaml-4.08.0/runtime/power.S
+++ ocaml-4.08.0/runtime/power.S
@@ -13,7 +13,7 @@
 /*                                                                        */
 /**************************************************************************/
 
-#if defined(MODEL_ppc64le)
+#if _CALL_ELF == 2
         .abiversion 2
 #endif
 
@@ -41,8 +41,7 @@
 #define TRAP_PREVIOUS_OFFSET 4
 #define CALLBACK_LINK_SIZE 16
 #define CALLBACK_LINK_OFFSET 0
-#endif
-#if defined(MODEL_ppc64)
+#elif _CALL_ELF == 1
 #define RESERVED_STACK 48
 #define PARAM_SAVE_AREA (8*8)
 #define LR_SAVE 16
@@ -53,8 +52,7 @@
 #define TRAP_PREVIOUS_OFFSET 64
 #define CALLBACK_LINK_SIZE 32
 #define CALLBACK_LINK_OFFSET 48
-#endif
-#if defined(MODEL_ppc64le)
+#elif _CALL_ELF == 2
 #define RESERVED_STACK 32
 #define PARAM_SAVE_AREA 0
 #define LR_SAVE 16
@@ -80,9 +78,8 @@
 #define ENDFUNCTION(name) \
   .size name, . - name
 
-#endif
 
-#if defined(MODEL_ppc64)
+#elif _CALL_ELF == 1
 #define FUNCTION(name) \
   .section ".opd","aw"; \
   .align 3; \
@@ -96,9 +93,8 @@
 #define ENDFUNCTION(name) \
   .size name, . - .L.name
 
-#endif
 
-#if defined(MODEL_ppc64le)
+#elif _CALL_ELF == 2
 #define FUNCTION(name) \
   .section ".text"; \
   .globl name; \
@@ -157,7 +153,7 @@
 
 #endif
 
-#if defined(MODEL_ppc64)
+#if _CALL_ELF == 1
         .section ".opd","aw"
 #else
         .section ".text"
@@ -338,14 +334,14 @@ FUNCTION(caml_c_call)
 #if defined(MODEL_ppc)
         mtctr   28
         bctrl
-#elif defined(MODEL_ppc64)
+#elif _CALL_ELF == 1
         ld      0, 0(28)
         mr      26, 2   /* save current TOC in a callee-save register */
         mtctr   0
         ld      2, 8(28)
         bctrl
         mr      2, 26   /* restore current TOC */
-#elif defined(MODEL_ppc64le)
+#elif _CALL_ELF == 2
         mtctr   28
         mr      12, 28
         mr      26, 2   /* save current TOC in a callee-save register */
@@ -514,14 +510,14 @@ FUNCTION(caml_start_program)
 #if defined(MODEL_ppc)
         mtctr   12
 .L105:  bctrl
-#elif defined(MODEL_ppc64)
+#elif _CALL_ELF == 1
         ld      0, 0(12)
         mtctr   0
         std     2, TOC_SAVE(1)
         ld      2, 8(12)
 .L105:  bctrl
         ld      2, TOC_SAVE(1)
-#elif defined(MODEL_ppc64le)
+#elif _CALL_ELF == 2
         mtctr   12
         std     2, TOC_SAVE(1)
 .L105:  bctrl
@@ -634,7 +630,7 @@ FUNCTION(caml_callback3_exn)
         b       .L102
 ENDFUNCTION(caml_callback3_exn)
 
-#if defined(MODEL_ppc64)
+#if _CALL_ELF == 1
         .section ".opd","aw"
 #else
         .section ".text"
--- ocaml-4.08.0/testsuite/tools/asmgen_power.S
+++ ocaml-4.08.0/testsuite/tools/asmgen_power.S
@@ -25,12 +25,10 @@
 #if defined(MODEL_ppc)
 #define RESERVED_STACK 16
 #define LR_SAVE_AREA 4
-#endif
-#if defined(MODEL_ppc64)
+#elif _CALL_ELF == 1
 #define RESERVED_STACK 48
 #define LR_SAVE_AREA 16
-#endif
-#if defined(MODEL_ppc64le)
+#elif _CALL_ELF == 2
 #define RESERVED_STACK 32
 #define LR_SAVE_AREA 16
 #endif
@@ -44,9 +42,8 @@
   .type name, @function; \
   .align 2; \
   name:
-#endif
 
-#if defined(MODEL_ppc64)
+#elif _CALL_ELF == 1
 #define FUNCTION(name) \
   .section ".opd","aw"; \
   .align 3; \
@@ -56,9 +53,8 @@
   .text; \
   .align 2; \
   .L.name:
-#endif
 
-#if defined(MODEL_ppc64le)
+#elif _CALL_ELF == 2
 #define FUNCTION(name) \
   .section ".text"; \
   .globl name; \
@@ -118,11 +114,11 @@ FUNCTION(call_gen_code)
     /* Get function pointer in CTR */
 #if defined(MODEL_ppc)
         mtctr   3
-#elif defined(MODEL_ppc64)
+#elif _CALL_ELF == 1
         ld      0, 0(3)
         mtctr   0
         ld      2, 8(3)
-#elif defined(MODEL_ppc64le)
+#elif _CALL_ELF == 2
         mtctr   3
         mr      12, 3
 #else
@@ -184,11 +180,11 @@ FUNCTION(caml_c_call)
     /* Jump to C function (address in r28) */
 #if defined(MODEL_ppc)
         mtctr   28
-#elif defined(MODEL_ppc64)
+#elif _CALL_ELF == 1
         ld      0, 0(28)
         mtctr   0
         ld      2, 8(28)
-#elif defined(MODEL_ppc64le)
+#elif _CALL_ELF == 2
         mtctr   28
         mr      12, 28
 #else
--- ocaml-4.08.0/runtime/caml/stack.h
+++ ocaml-4.08.0/runtime/caml/stack.h
@@ -35,10 +35,10 @@
 #if defined(MODEL_ppc)
 #define Saved_return_address(sp) *((intnat *)((sp) - 4))
 #define Callback_link(sp) ((struct caml_context *)((sp) + 16))
-#elif defined(MODEL_ppc64)
+#elif _CALL_ELF == 1
 #define Saved_return_address(sp) *((intnat *)((sp) + 16))
 #define Callback_link(sp) ((struct caml_context *)((sp) + (48 + 32)))
-#elif defined(MODEL_ppc64le)
+#elif _CALL_ELF == 2
 #define Saved_return_address(sp) *((intnat *)((sp) + 16))
 #define Callback_link(sp) ((struct caml_context *)((sp) + (32 + 32)))
 #else
