198 lines
4.9 KiB
Diff
198 lines
4.9 KiB
Diff
--- 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.10.0/runtime/power.S
|
|
+++ ocaml-4.10.0/runtime/power.S
|
|
@@ -13,7 +13,7 @@
|
|
/* */
|
|
/**************************************************************************/
|
|
|
|
-#if defined(MODEL_ppc64le)
|
|
+#if _CALL_ELF == 2
|
|
.abiversion 2
|
|
#endif
|
|
|
|
@@ -52,8 +52,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
|
|
@@ -64,8 +63,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
|
|
@@ -91,9 +89,8 @@
|
|
#define ENDFUNCTION(name) \
|
|
.size name, . - name
|
|
|
|
-#endif
|
|
|
|
-#if defined(MODEL_ppc64)
|
|
+#elif _CALL_ELF == 1
|
|
#define FUNCTION(name) \
|
|
.section ".opd","aw"; \
|
|
.align 3; \
|
|
@@ -107,9 +104,8 @@
|
|
#define ENDFUNCTION(name) \
|
|
.size name, . - .L.name
|
|
|
|
-#endif
|
|
|
|
-#if defined(MODEL_ppc64le)
|
|
+#elif _CALL_ELF == 2
|
|
#define FUNCTION(name) \
|
|
.section ".text"; \
|
|
.globl name; \
|
|
@@ -151,7 +147,7 @@
|
|
|
|
#define Caml_state(var) 8*domain_field_caml_##var(28)
|
|
|
|
-#if defined(MODEL_ppc64)
|
|
+#if _CALL_ELF == 1
|
|
.section ".opd","aw"
|
|
#else
|
|
.section ".text"
|
|
@@ -332,14 +328,14 @@
|
|
#if defined(MODEL_ppc)
|
|
mtctr C_CALL_FUN
|
|
bctrl
|
|
-#elif defined(MODEL_ppc64)
|
|
+#elif _CALL_ELF == 1
|
|
ld 0, 0(C_CALL_FUN)
|
|
mr C_CALL_TOC, 2 /* save current TOC in a callee-save register */
|
|
mtctr 0
|
|
ld 2, 8(C_CALL_FUN)
|
|
bctrl
|
|
mr 2, C_CALL_TOC /* restore current TOC */
|
|
-#elif defined(MODEL_ppc64le)
|
|
+#elif _CALL_ELF == 2
|
|
mtctr C_CALL_FUN
|
|
mr 12, C_CALL_FUN
|
|
mr C_CALL_TOC, 2 /* save current TOC in a callee-save register */
|
|
@@ -515,14 +511,14 @@
|
|
#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
|
|
@@ -641,7 +637,7 @@
|
|
b .L102
|
|
ENDFUNCTION(caml_callback3_asm)
|
|
|
|
-#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
|