[ocaml] More fixes for ppc64/ppc64le (RHBZ#1156300).

Richard W.M. Jones rjones at fedoraproject.org
Fri Oct 24 11:08:15 UTC 2014


commit c4dd5fe8415ee83a3d1e7a72c3bc7d1624418f5f
Author: Richard W.M. Jones <rjones at redhat.com>
Date:   Fri Oct 24 12:07:13 2014 +0100

    More fixes for ppc64/ppc64le (RHBZ#1156300).

 ...t-ignore-.-configure-it-s-a-real-git-file.patch |    2 +-
 ...y-compilerlibs-directory-is-created-by-gi.patch |    2 +-
 0003-Don-t-add-rpaths-to-libraries.patch           |    2 +-
 ...fo-ocamlplugininfo-Useful-utilities-from-.patch |    2 +-
 ...igure-Allow-user-defined-C-compiler-flags.patch |    2 +-
 0006-Add-support-for-ppc64.patch                   |    2 +-
 0007-ppc64-Update-for-OCaml-4.02.0.patch           |  205 ++++++++++++++++++++
 ...4le.patch => 0008-Add-support-for-ppc64le.patch |    4 +-
 0009-ppc64le-Update-for-OCaml-4.02.0.patch         |  204 +++++++++++++++++++
 ...10-arm-arm64-Mark-stack-as-non-executable.patch |    4 +-
 ...g-Add-no_arg-and-get_arg-helper-functions.patch |    4 +-
 ...lags-such-as-flag-arg-as-well-as-flag-arg.patch |    4 +-
 ...-ISO-C99-types-u-int-32-64-_t-in-preferen.patch |    4 +-
 ...pc64-ppc64le-Mark-stack-as-non-executable.patch |    4 +-
 ...le-proc-Interim-definitions-for-op_is_pur.patch |    8 +-
 ocaml.spec                                         |   20 +-
 16 files changed, 442 insertions(+), 31 deletions(-)
---
diff --git a/0001-Don-t-ignore-.-configure-it-s-a-real-git-file.patch b/0001-Don-t-ignore-.-configure-it-s-a-real-git-file.patch
index fb76df3..784a624 100644
--- a/0001-Don-t-ignore-.-configure-it-s-a-real-git-file.patch
+++ b/0001-Don-t-ignore-.-configure-it-s-a-real-git-file.patch
@@ -1,7 +1,7 @@
 From ccc1bf226619608230dc94b26377756719cf7b20 Mon Sep 17 00:00:00 2001
 From: "Richard W.M. Jones" <rjones at redhat.com>
 Date: Tue, 24 Jun 2014 22:29:38 +0100
-Subject: [PATCH 01/13] Don't ignore ./configure, it's a real git file.
+Subject: [PATCH 01/15] Don't ignore ./configure, it's a real git file.
 
 ---
  .gitignore | 1 -
diff --git a/0002-Ensure-empty-compilerlibs-directory-is-created-by-gi.patch b/0002-Ensure-empty-compilerlibs-directory-is-created-by-gi.patch
index 105ac56..94cb1f9 100644
--- a/0002-Ensure-empty-compilerlibs-directory-is-created-by-gi.patch
+++ b/0002-Ensure-empty-compilerlibs-directory-is-created-by-gi.patch
@@ -1,7 +1,7 @@
 From 0e3b6450f6ab803442a809b6da41d5d5c5da650f Mon Sep 17 00:00:00 2001
 From: "Richard W.M. Jones" <rjones at redhat.com>
 Date: Thu, 7 Jun 2012 15:36:16 +0100
-Subject: [PATCH 02/13] Ensure empty compilerlibs/ directory is created by git.
+Subject: [PATCH 02/15] Ensure empty compilerlibs/ directory is created by git.
 
 This directory exists in the OCaml tarball, but is empty.  As a
 result, git ignores it unless we put a dummy file in it.
diff --git a/0003-Don-t-add-rpaths-to-libraries.patch b/0003-Don-t-add-rpaths-to-libraries.patch
index 4ccc42e..3e1d591 100644
--- a/0003-Don-t-add-rpaths-to-libraries.patch
+++ b/0003-Don-t-add-rpaths-to-libraries.patch
@@ -1,7 +1,7 @@
 From 79f0f91e3e4abbfbd3564c11ea72e53310236afc Mon Sep 17 00:00:00 2001
 From: "Richard W.M. Jones" <rjones at redhat.com>
 Date: Tue, 24 Jun 2014 10:00:15 +0100
-Subject: [PATCH 03/13] Don't add rpaths to libraries.
+Subject: [PATCH 03/15] Don't add rpaths to libraries.
 
 ---
  tools/Makefile.shared | 6 +++---
diff --git a/0004-ocamlbyteinfo-ocamlplugininfo-Useful-utilities-from-.patch b/0004-ocamlbyteinfo-ocamlplugininfo-Useful-utilities-from-.patch
index 8f7c70f..f6b0b86 100644
--- a/0004-ocamlbyteinfo-ocamlplugininfo-Useful-utilities-from-.patch
+++ b/0004-ocamlbyteinfo-ocamlplugininfo-Useful-utilities-from-.patch
@@ -1,7 +1,7 @@
 From 11b377aee2811891635982a5590fef62f12645b6 Mon Sep 17 00:00:00 2001
 From: "Richard W.M. Jones" <rjones at redhat.com>
 Date: Tue, 29 May 2012 20:40:36 +0100
-Subject: [PATCH 04/13] ocamlbyteinfo, ocamlplugininfo: Useful utilities from
+Subject: [PATCH 04/15] ocamlbyteinfo, ocamlplugininfo: Useful utilities from
  Debian, sent upstream.
 
 See:
diff --git a/0005-configure-Allow-user-defined-C-compiler-flags.patch b/0005-configure-Allow-user-defined-C-compiler-flags.patch
index c3c8967..a6a591f 100644
--- a/0005-configure-Allow-user-defined-C-compiler-flags.patch
+++ b/0005-configure-Allow-user-defined-C-compiler-flags.patch
@@ -1,7 +1,7 @@
 From 5308c47681201ef3beef3e543ab877f81aa08784 Mon Sep 17 00:00:00 2001
 From: "Richard W.M. Jones" <rjones at redhat.com>
 Date: Tue, 29 May 2012 20:44:18 +0100
-Subject: [PATCH 05/13] configure: Allow user defined C compiler flags.
+Subject: [PATCH 05/15] configure: Allow user defined C compiler flags.
 
 ---
  configure | 4 ++++
diff --git a/0006-Add-support-for-ppc64.patch b/0006-Add-support-for-ppc64.patch
index 02215fb..fcab56c 100644
--- a/0006-Add-support-for-ppc64.patch
+++ b/0006-Add-support-for-ppc64.patch
@@ -1,7 +1,7 @@
 From 3628c89d319ac8286b62ec1405561b72bda4ba0d Mon Sep 17 00:00:00 2001
 From: "Richard W.M. Jones" <rjones at redhat.com>
 Date: Tue, 29 May 2012 20:47:07 +0100
-Subject: [PATCH 06/13] Add support for ppc64.
+Subject: [PATCH 06/15] Add support for ppc64.
 
 Note (1): This patch was rejected upstream because they don't have
 appropriate hardware for testing.
diff --git a/0007-ppc64-Update-for-OCaml-4.02.0.patch b/0007-ppc64-Update-for-OCaml-4.02.0.patch
new file mode 100644
index 0000000..65fc287
--- /dev/null
+++ b/0007-ppc64-Update-for-OCaml-4.02.0.patch
@@ -0,0 +1,205 @@
+From e07a92272d84fc98ddbe0b42439fa1518283296d Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones at redhat.com>
+Date: Fri, 24 Oct 2014 12:59:23 +0200
+Subject: [PATCH 07/15] ppc64: Update for OCaml 4.02.0.
+
+These are based on the power (ppc32) branch and some guesswork.
+In particular, I'm not convinced that my changes to floating
+point constant handling are correct, although I wrote a small
+test program which worked.
+
+Therefore these are not yet integrated into the main patch.
+---
+ asmcomp/power64/CSE.ml        | 37 +++++++++++++++++++++++++++++++++++++
+ asmcomp/power64/emit.mlp      | 23 ++++++++++++++---------
+ asmcomp/power64/proc.ml       |  8 ++++----
+ asmcomp/power64/scheduling.ml |  2 +-
+ 4 files changed, 56 insertions(+), 14 deletions(-)
+ create mode 100644 asmcomp/power64/CSE.ml
+
+diff --git a/asmcomp/power64/CSE.ml b/asmcomp/power64/CSE.ml
+new file mode 100644
+index 0000000..ec10d2d
+--- /dev/null
++++ b/asmcomp/power64/CSE.ml
+@@ -0,0 +1,37 @@
++(***********************************************************************)
++(*                                                                     *)
++(*                                OCaml                                *)
++(*                                                                     *)
++(*            Xavier Leroy, projet Gallium, INRIA Rocquencourt         *)
++(*                                                                     *)
++(*  Copyright 2014 Institut National de Recherche en Informatique et   *)
++(*  en Automatique.  All rights reserved.  This file is distributed    *)
++(*  under the terms of the Q Public License version 1.0.               *)
++(*                                                                     *)
++(***********************************************************************)
++
++(* CSE for the PowerPC *)
++
++open Arch
++open Mach
++open CSEgen
++
++class cse = object (self)
++
++inherit cse_generic as super
++
++method! class_of_operation op =
++  match op with
++  | Ispecific(Imultaddf | Imultsubf) -> Op_pure
++  | Ispecific(Ialloc_far _) -> Op_other
++  | _ -> super#class_of_operation op
++
++method! is_cheap_operation op =
++  match op with
++  | Iconst_int n | Iconst_blockheader n -> n <= 32767n && n >= -32768n
++  | _ -> false
++
++end
++
++let fundecl f =
++  (new cse)#fundecl f
+diff --git a/asmcomp/power64/emit.mlp b/asmcomp/power64/emit.mlp
+index d84ac5c..9fd59b2 100644
+--- a/asmcomp/power64/emit.mlp
++++ b/asmcomp/power64/emit.mlp
+@@ -292,6 +292,7 @@ let name_for_int_comparison = function
+ let name_for_intop = function
+     Iadd -> "add"
+   | Imul -> "mulld"
++  | Imulh -> "mulhd"
+   | Idiv -> "divd"
+   | Iand -> "and"
+   | Ior  -> "or"
+@@ -354,7 +355,8 @@ let load_store_size = function
+ let instr_size = function
+     Lend -> 0
+   | Lop(Imove | Ispill | Ireload) -> 1
+-  | Lop(Iconst_int n) -> if is_native_immediate n then 1 else 2
++  | Lop(Iconst_int n | Iconst_blockheader n) ->
++    if is_native_immediate n then 1 else 2
+   | Lop(Iconst_float s) -> 2
+   | Lop(Iconst_symbol s) -> 2
+   | Lop(Icall_ind) -> 6
+@@ -370,7 +372,7 @@ let instr_size = function
+       if chunk = Byte_signed
+       then load_store_size addr + 1
+       else load_store_size addr
+-  | Lop(Istore(chunk, addr)) -> load_store_size addr
++  | Lop(Istore(chunk, addr, _)) -> load_store_size addr
+   | Lop(Ialloc n) -> 4
+   | Lop(Ispecific(Ialloc_far n)) -> 5
+   | Lop(Iintop Imod) -> 3
+@@ -397,7 +399,7 @@ let instr_size = function
+   | Lsetuptrap lbl -> 1
+   | Lpushtrap -> 7
+   | Lpoptrap -> 1
+-  | Lraise -> 6
++  | Lraise _ -> 6
+ 
+ let label_map code =
+   let map = Hashtbl.create 37 in
+@@ -492,7 +494,7 @@ let rec emit_instr i dslot =
+             | (_, _) ->
+                 fatal_error "Emit: Imove"
+         end
+-    | Lop(Iconst_int n) ->
++    | Lop(Iconst_int n | Iconst_blockheader n) ->
+         if is_native_immediate n then
+           `    li      {emit_reg i.res.(0)}, {emit_nativeint n}\n`
+         else if n >= -0x8000_0000n && n <= 0x7FFF_FFFFn then begin
+@@ -502,7 +504,8 @@ let rec emit_instr i dslot =
+         end else begin
+            `   ld      {emit_reg i.res.(0)}, {emit_tocref (TocInt n)}\n`
+         end
+-    | Lop(Iconst_float s) ->
++    | Lop(Iconst_float f) ->
++        let s = string_of_float f in
+         `      lfd     {emit_reg i.res.(0)}, {emit_tocref (TocFloat s)}\n`
+     | Lop(Iconst_symbol s) ->
+         `      ld      {emit_reg i.res.(0)}, {emit_tocref (TocSymOfs (s,0))}\n`
+@@ -581,7 +584,7 @@ let rec emit_instr i dslot =
+         emit_load_store loadinstr addr i.arg 0 i.res.(0);
+         if chunk = Byte_signed then
+           `    extsb   {emit_reg i.res.(0)}, {emit_reg i.res.(0)}\n`
+-    | Lop(Istore(chunk, addr)) ->
++    | Lop(Istore(chunk, addr, _)) ->
+         let storeinstr =
+           match chunk with
+             Byte_unsigned | Byte_signed -> "stb"
+@@ -772,7 +775,7 @@ let rec emit_instr i dslot =
+        `       mr      {emit_gpr 29}, {emit_gpr 11}\n`
+     | Lpoptrap ->
+         `      ld      {emit_gpr 29}, 0({emit_gpr 29})\n`
+-    | Lraise ->
++    | Lraise _ ->
+         `      ld      {emit_gpr 0}, 8({emit_gpr 29})\n`;
+         `      ld      {emit_gpr 1}, 16({emit_gpr 29})\n`;
+         `      ld      {emit_gpr 2}, 24({emit_gpr 29})\n`;
+@@ -903,9 +906,11 @@ let emit_item = function
+   | Cint n ->
+       `        .quad   {emit_nativeint n}\n`
+   | Csingle f ->
+-      `        .float  0d{emit_string f}\n`
++      let s = string_of_float f in
++      `        .float  0d{emit_string s}\n`
+   | Cdouble f ->
+-      `        .double 0d{emit_string f}\n`
++      let s = string_of_float f in
++      `        .double 0d{emit_string s}\n`
+   | Csymbol_address s ->
+       `        .quad   {emit_symbol s}\n`
+   | Clabel_address lbl ->
+diff --git a/asmcomp/power64/proc.ml b/asmcomp/power64/proc.ml
+index 372303d..a5a35f3 100644
+--- a/asmcomp/power64/proc.ml
++++ b/asmcomp/power64/proc.ml
+@@ -85,11 +85,11 @@ let rotate_registers = true
+ (* Representation of hard registers by pseudo-registers *)
+ 
+ let hard_int_reg =
+-  let v = Array.create 23 Reg.dummy in
++  let v = Array.make 23 Reg.dummy in
+   for i = 0 to 22 do v.(i) <- Reg.at_location Int (Reg i) done; v
+ 
+ let hard_float_reg =
+-  let v = Array.create 31 Reg.dummy in
++  let v = Array.make 31 Reg.dummy in
+   for i = 0 to 30 do v.(i) <- Reg.at_location Float (Reg(100 + i)) done; v
+ 
+ let all_phys_regs =
+@@ -105,7 +105,7 @@ let stack_slot slot ty =
+ 
+ let calling_conventions
+     first_int last_int first_float last_float make_stack stack_ofs arg =
+-  let loc = Array.create (Array.length arg) Reg.dummy in
++  let loc = Array.make (Array.length arg) Reg.dummy in
+   let int = ref first_int in
+   let float = ref first_float in
+   let ofs = ref stack_ofs in
+@@ -159,7 +159,7 @@ let loc_results res =
+ 
+ let poweropen_external_conventions first_int last_int
+                                    first_float last_float arg =
+-  let loc = Array.create (Array.length arg) Reg.dummy in
++  let loc = Array.make (Array.length arg) Reg.dummy in
+   let int = ref first_int in
+   let float = ref first_float in
+   let ofs = ref (14 * size_addr) in
+diff --git a/asmcomp/power64/scheduling.ml b/asmcomp/power64/scheduling.ml
+index b7bba9b..b582b6a 100644
+--- a/asmcomp/power64/scheduling.ml
++++ b/asmcomp/power64/scheduling.ml
+@@ -46,7 +46,7 @@ method reload_retaddr_latency = 12
+ method oper_issue_cycles = function
+     Iconst_float _ | Iconst_symbol _ -> 2
+   | Iload(_, Ibased(_, _)) -> 2
+-  | Istore(_, Ibased(_, _)) -> 2
++  | Istore(_, Ibased(_, _), _) -> 2
+   | Ialloc _ -> 4
+   | Iintop(Imod) -> 40 (* assuming full stall *)
+   | Iintop(Icomp _) -> 4
+-- 
+2.0.4
+
diff --git a/0007-Add-support-for-ppc64le.patch b/0008-Add-support-for-ppc64le.patch
similarity index 99%
rename from 0007-Add-support-for-ppc64le.patch
rename to 0008-Add-support-for-ppc64le.patch
index c97eb70..3794497 100644
--- a/0007-Add-support-for-ppc64le.patch
+++ b/0008-Add-support-for-ppc64le.patch
@@ -1,7 +1,7 @@
-From ab7ac2b3c241dfd2db8f9b6818d324997c982708 Mon Sep 17 00:00:00 2001
+From 371f3ea408ebfc627ab964bb82efc1b5ced1b9b0 Mon Sep 17 00:00:00 2001
 From: Michel Normand <normand at linux.vnet.ibm.com>
 Date: Tue, 18 Mar 2014 09:15:47 -0400
-Subject: [PATCH 07/13] Add support for ppc64le.
+Subject: [PATCH 08/15] Add support for ppc64le.
 
 Signed-off-by: Michel Normand <normand at linux.vnet.ibm.com>
 ---
diff --git a/0009-ppc64le-Update-for-OCaml-4.02.0.patch b/0009-ppc64le-Update-for-OCaml-4.02.0.patch
new file mode 100644
index 0000000..042eeae
--- /dev/null
+++ b/0009-ppc64le-Update-for-OCaml-4.02.0.patch
@@ -0,0 +1,204 @@
+From 2d809c0bf3d0f4106ec7ff9c9e4ee3c8204d9516 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones at redhat.com>
+Date: Fri, 24 Oct 2014 12:59:23 +0200
+Subject: [PATCH 09/15] ppc64le: Update for OCaml 4.02.0.
+
+These are based on the power (ppc32) branch and some guesswork.  In
+particular, I'm not convinced that my changes to floating point
+constant handling are correct.
+
+Therefore these are not yet integrated into the main patch.
+---
+ asmcomp/power64le/CSE.ml        | 37 +++++++++++++++++++++++++++++++++++++
+ asmcomp/power64le/emit.mlp      | 23 ++++++++++++++---------
+ asmcomp/power64le/proc.ml       |  8 ++++----
+ asmcomp/power64le/scheduling.ml |  2 +-
+ 4 files changed, 56 insertions(+), 14 deletions(-)
+ create mode 100644 asmcomp/power64le/CSE.ml
+
+diff --git a/asmcomp/power64le/CSE.ml b/asmcomp/power64le/CSE.ml
+new file mode 100644
+index 0000000..ec10d2d
+--- /dev/null
++++ b/asmcomp/power64le/CSE.ml
+@@ -0,0 +1,37 @@
++(***********************************************************************)
++(*                                                                     *)
++(*                                OCaml                                *)
++(*                                                                     *)
++(*            Xavier Leroy, projet Gallium, INRIA Rocquencourt         *)
++(*                                                                     *)
++(*  Copyright 2014 Institut National de Recherche en Informatique et   *)
++(*  en Automatique.  All rights reserved.  This file is distributed    *)
++(*  under the terms of the Q Public License version 1.0.               *)
++(*                                                                     *)
++(***********************************************************************)
++
++(* CSE for the PowerPC *)
++
++open Arch
++open Mach
++open CSEgen
++
++class cse = object (self)
++
++inherit cse_generic as super
++
++method! class_of_operation op =
++  match op with
++  | Ispecific(Imultaddf | Imultsubf) -> Op_pure
++  | Ispecific(Ialloc_far _) -> Op_other
++  | _ -> super#class_of_operation op
++
++method! is_cheap_operation op =
++  match op with
++  | Iconst_int n | Iconst_blockheader n -> n <= 32767n && n >= -32768n
++  | _ -> false
++
++end
++
++let fundecl f =
++  (new cse)#fundecl f
+diff --git a/asmcomp/power64le/emit.mlp b/asmcomp/power64le/emit.mlp
+index 5736a18..3f34102 100644
+--- a/asmcomp/power64le/emit.mlp
++++ b/asmcomp/power64le/emit.mlp
+@@ -297,6 +297,7 @@ let name_for_int_comparison = function
+ let name_for_intop = function
+     Iadd -> "add"
+   | Imul -> "mulld"
++  | Imulh -> "mulhd"
+   | Idiv -> "divd"
+   | Iand -> "and"
+   | Ior  -> "or"
+@@ -359,7 +360,8 @@ let load_store_size = function
+ let instr_size = function
+     Lend -> 0
+   | Lop(Imove | Ispill | Ireload) -> 1
+-  | Lop(Iconst_int n) -> if is_native_immediate n then 1 else 2
++  | Lop(Iconst_int n | Iconst_blockheader n) ->
++    if is_native_immediate n then 1 else 2
+   | Lop(Iconst_float s) -> 2
+   | Lop(Iconst_symbol s) -> 2
+   | Lop(Icall_ind) -> 4
+@@ -375,7 +377,7 @@ let instr_size = function
+       if chunk = Byte_signed
+       then load_store_size addr + 1
+       else load_store_size addr
+-  | Lop(Istore(chunk, addr)) -> load_store_size addr
++  | Lop(Istore(chunk, addr, _)) -> load_store_size addr
+   | Lop(Ialloc n) -> 4
+   | Lop(Ispecific(Ialloc_far n)) -> 5
+   | Lop(Iintop Imod) -> 3
+@@ -402,7 +404,7 @@ let instr_size = function
+   | Lsetuptrap lbl -> 1
+   | Lpushtrap -> 7
+   | Lpoptrap -> 1
+-  | Lraise -> 6
++  | Lraise _ -> 6
+ 
+ let label_map code =
+   let map = Hashtbl.create 37 in
+@@ -497,7 +499,7 @@ let rec emit_instr i dslot =
+             | (_, _) ->
+                 fatal_error "Emit: Imove"
+         end
+-    | Lop(Iconst_int n) ->
++    | Lop(Iconst_int n | Iconst_blockheader n) ->
+         if is_native_immediate n then
+           `    li      {emit_reg i.res.(0)}, {emit_nativeint n}\n`
+         else if n >= -0x8000_0000n && n <= 0x7FFF_FFFFn then begin
+@@ -507,7 +509,8 @@ let rec emit_instr i dslot =
+         end else begin
+            `   ld      {emit_reg i.res.(0)}, {emit_tocref (TocInt n)}\n`
+         end
+-    | Lop(Iconst_float s) ->
++    | Lop(Iconst_float f) ->
++        let s = string_of_float f in
+         `      lfd     {emit_reg i.res.(0)}, {emit_tocref (TocFloat s)}\n`
+     | Lop(Iconst_symbol s) ->
+         `      ld      {emit_reg i.res.(0)}, {emit_tocref (TocSymOfs (s,0))}\n`
+@@ -576,7 +579,7 @@ let rec emit_instr i dslot =
+         emit_load_store loadinstr addr i.arg 0 i.res.(0);
+         if chunk = Byte_signed then
+           `    extsb   {emit_reg i.res.(0)}, {emit_reg i.res.(0)}\n`
+-    | Lop(Istore(chunk, addr)) ->
++    | Lop(Istore(chunk, addr, _)) ->
+         let storeinstr =
+           match chunk with
+             Byte_unsigned | Byte_signed -> "stb"
+@@ -767,7 +770,7 @@ let rec emit_instr i dslot =
+        `       mr      {emit_gpr 29}, {emit_gpr 11}\n`
+     | Lpoptrap ->
+         `      ld      {emit_gpr 29}, 0({emit_gpr 29})\n`
+-    | Lraise ->
++    | Lraise _ ->
+         `      ld      {emit_gpr 0}, 8({emit_gpr 29})\n`;
+         `      ld      {emit_gpr 1}, 16({emit_gpr 29})\n`;
+         `      ld      {emit_gpr 2}, 24({emit_gpr 29})\n`;
+@@ -895,9 +898,11 @@ let emit_item = function
+   | Cint n ->
+       `        .quad   {emit_nativeint n}\n`
+   | Csingle f ->
+-      `        .float  0d{emit_string f}\n`
++      let s = string_of_float f in
++      `        .float  0d{emit_string s}\n`
+   | Cdouble f ->
+-      `        .double 0d{emit_string f}\n`
++      let s = string_of_float f in
++      `        .double 0d{emit_string s}\n`
+   | Csymbol_address s ->
+       `        .quad   {emit_symbol s}\n`
+   | Clabel_address lbl ->
+diff --git a/asmcomp/power64le/proc.ml b/asmcomp/power64le/proc.ml
+index 9b98577..476c984 100644
+--- a/asmcomp/power64le/proc.ml
++++ b/asmcomp/power64le/proc.ml
+@@ -85,11 +85,11 @@ let rotate_registers = true
+ (* Representation of hard registers by pseudo-registers *)
+ 
+ let hard_int_reg =
+-  let v = Array.create 23 Reg.dummy in
++  let v = Array.make 23 Reg.dummy in
+   for i = 0 to 22 do v.(i) <- Reg.at_location Int (Reg i) done; v
+ 
+ let hard_float_reg =
+-  let v = Array.create 31 Reg.dummy in
++  let v = Array.make 31 Reg.dummy in
+   for i = 0 to 30 do v.(i) <- Reg.at_location Float (Reg(100 + i)) done; v
+ 
+ let all_phys_regs =
+@@ -105,7 +105,7 @@ let stack_slot slot ty =
+ 
+ let calling_conventions
+     first_int last_int first_float last_float make_stack stack_ofs arg =
+-  let loc = Array.create (Array.length arg) Reg.dummy in
++  let loc = Array.make (Array.length arg) Reg.dummy in
+   let int = ref first_int in
+   let float = ref first_float in
+   let ofs = ref stack_ofs in
+@@ -159,7 +159,7 @@ let loc_results res =
+ 
+ let poweropen_external_conventions first_int last_int
+                                    first_float last_float arg =
+-  let loc = Array.create (Array.length arg) Reg.dummy in
++  let loc = Array.make (Array.length arg) Reg.dummy in
+   let int = ref first_int in
+   let float = ref first_float in
+   let ofs = ref (14 * size_addr) in
+diff --git a/asmcomp/power64le/scheduling.ml b/asmcomp/power64le/scheduling.ml
+index b7bba9b..b582b6a 100644
+--- a/asmcomp/power64le/scheduling.ml
++++ b/asmcomp/power64le/scheduling.ml
+@@ -46,7 +46,7 @@ method reload_retaddr_latency = 12
+ method oper_issue_cycles = function
+     Iconst_float _ | Iconst_symbol _ -> 2
+   | Iload(_, Ibased(_, _)) -> 2
+-  | Istore(_, Ibased(_, _)) -> 2
++  | Istore(_, Ibased(_, _), _) -> 2
+   | Ialloc _ -> 4
+   | Iintop(Imod) -> 40 (* assuming full stall *)
+   | Iintop(Icomp _) -> 4
+-- 
+2.0.4
+
diff --git a/0008-arm-arm64-Mark-stack-as-non-executable.patch b/0010-arm-arm64-Mark-stack-as-non-executable.patch
similarity index 89%
rename from 0008-arm-arm64-Mark-stack-as-non-executable.patch
rename to 0010-arm-arm64-Mark-stack-as-non-executable.patch
index 8929e3a..c814442 100644
--- a/0008-arm-arm64-Mark-stack-as-non-executable.patch
+++ b/0010-arm-arm64-Mark-stack-as-non-executable.patch
@@ -1,7 +1,7 @@
-From 515d0ac7418f3ec999dae4821ffb4888ef8c9825 Mon Sep 17 00:00:00 2001
+From 00721516cd921f71f727915e14b723412afe835a Mon Sep 17 00:00:00 2001
 From: "Richard W.M. Jones" <rjones at redhat.com>
 Date: Sat, 10 May 2014 03:20:35 -0400
-Subject: [PATCH 08/13] arm, arm64: Mark stack as non-executable.
+Subject: [PATCH 10/15] arm, arm64: Mark stack as non-executable.
 
 The same fix as this one, which was only fully applied to
 i686 & x86-64:
diff --git a/0009-arg-Add-no_arg-and-get_arg-helper-functions.patch b/0011-arg-Add-no_arg-and-get_arg-helper-functions.patch
similarity index 97%
rename from 0009-arg-Add-no_arg-and-get_arg-helper-functions.patch
rename to 0011-arg-Add-no_arg-and-get_arg-helper-functions.patch
index a47353d..2214c5e 100644
--- a/0009-arg-Add-no_arg-and-get_arg-helper-functions.patch
+++ b/0011-arg-Add-no_arg-and-get_arg-helper-functions.patch
@@ -1,7 +1,7 @@
-From c2783885f93b0394376cc99354f67b3647cfcfc2 Mon Sep 17 00:00:00 2001
+From 8c54b8588ea3000c5082a0a2b2e57c3d5a1a8655 Mon Sep 17 00:00:00 2001
 From: "Richard W.M. Jones" <rjones at redhat.com>
 Date: Tue, 1 Apr 2014 11:17:07 +0100
-Subject: [PATCH 09/13] arg: Add no_arg and get_arg helper functions.
+Subject: [PATCH 11/15] arg: Add no_arg and get_arg helper functions.
 
 The no_arg function in this patch is a no-op.  It will do something
 useful in the followups.
diff --git a/0010-arg-Allow-flags-such-as-flag-arg-as-well-as-flag-arg.patch b/0012-arg-Allow-flags-such-as-flag-arg-as-well-as-flag-arg.patch
similarity index 95%
rename from 0010-arg-Allow-flags-such-as-flag-arg-as-well-as-flag-arg.patch
rename to 0012-arg-Allow-flags-such-as-flag-arg-as-well-as-flag-arg.patch
index 0eef1bc..4ca5cd9 100644
--- a/0010-arg-Allow-flags-such-as-flag-arg-as-well-as-flag-arg.patch
+++ b/0012-arg-Allow-flags-such-as-flag-arg-as-well-as-flag-arg.patch
@@ -1,7 +1,7 @@
-From 21a743dc1983b3b41ddaa790c621fe0b46969e1f Mon Sep 17 00:00:00 2001
+From 857b0cdc2ac37926e625034e5e62114e103cfe9e Mon Sep 17 00:00:00 2001
 From: "Richard W.M. Jones" <rjones at redhat.com>
 Date: Tue, 1 Apr 2014 11:21:40 +0100
-Subject: [PATCH 10/13] arg: Allow flags such as --flag=arg as well as --flag
+Subject: [PATCH 12/15] arg: Allow flags such as --flag=arg as well as --flag
  arg.
 
 Allow flags to be followed directly by their argument, separated by an '='
diff --git a/0011-PR-6517-use-ISO-C99-types-u-int-32-64-_t-in-preferen.patch b/0013-PR-6517-use-ISO-C99-types-u-int-32-64-_t-in-preferen.patch
similarity index 99%
rename from 0011-PR-6517-use-ISO-C99-types-u-int-32-64-_t-in-preferen.patch
rename to 0013-PR-6517-use-ISO-C99-types-u-int-32-64-_t-in-preferen.patch
index 733cda7..5d397a2 100644
--- a/0011-PR-6517-use-ISO-C99-types-u-int-32-64-_t-in-preferen.patch
+++ b/0013-PR-6517-use-ISO-C99-types-u-int-32-64-_t-in-preferen.patch
@@ -1,7 +1,7 @@
-From 8dcd718671ad2bd5384a9d9ffeed7d33b1b34a27 Mon Sep 17 00:00:00 2001
+From d58a221d0fd307d80bed6cfcec67a1c97e47439c Mon Sep 17 00:00:00 2001
 From: Xavier Leroy <xavier.leroy at inria.fr>
 Date: Wed, 27 Aug 2014 09:58:33 +0000
-Subject: [PATCH 11/13] PR#6517: use ISO C99 types {,u}int{32,64}_t in
+Subject: [PATCH 13/15] PR#6517: use ISO C99 types {,u}int{32,64}_t in
  preference to our homegrown types {,u}int{32,64}.
 
 git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@15131 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
diff --git a/0012-ppc-ppc64-ppc64le-Mark-stack-as-non-executable.patch b/0014-ppc-ppc64-ppc64le-Mark-stack-as-non-executable.patch
similarity index 90%
rename from 0012-ppc-ppc64-ppc64le-Mark-stack-as-non-executable.patch
rename to 0014-ppc-ppc64-ppc64le-Mark-stack-as-non-executable.patch
index a3a00bf..2c9da1f 100644
--- a/0012-ppc-ppc64-ppc64le-Mark-stack-as-non-executable.patch
+++ b/0014-ppc-ppc64-ppc64le-Mark-stack-as-non-executable.patch
@@ -1,7 +1,7 @@
-From 719dd72c791d557ab6bc17a1327a36fb04ea9237 Mon Sep 17 00:00:00 2001
+From 907e64f45ad87b746aad704af717b067d0909014 Mon Sep 17 00:00:00 2001
 From: "Richard W.M. Jones" <rjones at redhat.com>
 Date: Thu, 11 Sep 2014 14:49:54 +0100
-Subject: [PATCH 12/13] ppc, ppc64, ppc64le: Mark stack as non-executable.
+Subject: [PATCH 14/15] ppc, ppc64, ppc64le: Mark stack as non-executable.
 
 The same fix as this one, which was only fully applied to
 i686 & x86-64:
diff --git a/0013-ppc64-ppc64le-proc-Interim-definitions-for-op_is_pur.patch b/0015-ppc64-ppc64le-proc-Interim-definitions-for-op_is_pur.patch
similarity index 92%
rename from 0013-ppc64-ppc64le-proc-Interim-definitions-for-op_is_pur.patch
rename to 0015-ppc64-ppc64le-proc-Interim-definitions-for-op_is_pur.patch
index 5c0ef52..505f6c5 100644
--- a/0013-ppc64-ppc64le-proc-Interim-definitions-for-op_is_pur.patch
+++ b/0015-ppc64-ppc64le-proc-Interim-definitions-for-op_is_pur.patch
@@ -1,7 +1,7 @@
-From 0d60237e349595e1022c2258fe6fcb4137d9e128 Mon Sep 17 00:00:00 2001
+From a3cbc5d7e8f5576c9b0d5fb32b359d75c0edfdb1 Mon Sep 17 00:00:00 2001
 From: "Richard W.M. Jones" <rjones at redhat.com>
 Date: Fri, 24 Oct 2014 10:10:54 +0100
-Subject: [PATCH 13/13] ppc64/ppc64le: proc: Interim definitions for op_is_pure
+Subject: [PATCH 15/15] ppc64/ppc64le: proc: Interim definitions for op_is_pure
  and regs_are_volatile.
 
 See: https://bugzilla.redhat.com/show_bug.cgi?id=1156300
@@ -14,7 +14,7 @@ someone more familiar with the compiler and POWER architecture.
  2 files changed, 30 insertions(+)
 
 diff --git a/asmcomp/power64/proc.ml b/asmcomp/power64/proc.ml
-index 372303d..85a8742 100644
+index a5a35f3..c377f69 100644
 --- a/asmcomp/power64/proc.ml
 +++ b/asmcomp/power64/proc.ml
 @@ -202,6 +202,10 @@ let loc_external_results res =
@@ -47,7 +47,7 @@ index 372303d..85a8742 100644
  
  let num_stack_slots = [| 0; 0 |]
 diff --git a/asmcomp/power64le/proc.ml b/asmcomp/power64le/proc.ml
-index 9b98577..ea956b8 100644
+index 476c984..56473ac 100644
 --- a/asmcomp/power64le/proc.ml
 +++ b/asmcomp/power64le/proc.ml
 @@ -202,6 +202,10 @@ let loc_external_results res =
diff --git a/ocaml.spec b/ocaml.spec
index bf28026..f07e521 100644
--- a/ocaml.spec
+++ b/ocaml.spec
@@ -17,7 +17,7 @@
 
 Name:           ocaml
 Version:        4.02.0
-Release:        5%{?dist}
+Release:        6%{?dist}
 
 Summary:        OCaml compiler and programming environment
 
@@ -51,13 +51,15 @@ Patch0003:      0003-Don-t-add-rpaths-to-libraries.patch
 Patch0004:      0004-ocamlbyteinfo-ocamlplugininfo-Useful-utilities-from-.patch
 Patch0005:      0005-configure-Allow-user-defined-C-compiler-flags.patch
 Patch0006:      0006-Add-support-for-ppc64.patch
-Patch0007:      0007-Add-support-for-ppc64le.patch
-Patch0008:      0008-arm-arm64-Mark-stack-as-non-executable.patch
-Patch0009:      0009-arg-Add-no_arg-and-get_arg-helper-functions.patch
-Patch0010:      0010-arg-Allow-flags-such-as-flag-arg-as-well-as-flag-arg.patch
-Patch0011:      0011-PR-6517-use-ISO-C99-types-u-int-32-64-_t-in-preferen.patch
-Patch0012:      0012-ppc-ppc64-ppc64le-Mark-stack-as-non-executable.patch
-Patch0013:      0013-ppc64-ppc64le-proc-Interim-definitions-for-op_is_pur.patch
+Patch0007:      0007-ppc64-Update-for-OCaml-4.02.0.patch
+Patch0008:      0008-Add-support-for-ppc64le.patch
+Patch0009:      0009-ppc64le-Update-for-OCaml-4.02.0.patch
+Patch0010:      0010-arm-arm64-Mark-stack-as-non-executable.patch
+Patch0011:      0011-arg-Add-no_arg-and-get_arg-helper-functions.patch
+Patch0012:      0012-arg-Allow-flags-such-as-flag-arg-as-well-as-flag-arg.patch
+Patch0013:      0013-PR-6517-use-ISO-C99-types-u-int-32-64-_t-in-preferen.patch
+Patch0014:      0014-ppc-ppc64-ppc64le-Mark-stack-as-non-executable.patch
+Patch0015:      0015-ppc64-ppc64le-proc-Interim-definitions-for-op_is_pur.patch
 
 # Add BFD support so that ocamlobjinfo supports *.cmxs format (RHBZ#1113735).
 BuildRequires:  binutils-devel
@@ -420,7 +422,7 @@ fi
 
 
 %changelog
-* Fri Oct 24 2014 Richard W.M. Jones <rjones at redhat.com> - 4.02.0-5
+* Fri Oct 24 2014 Richard W.M. Jones <rjones at redhat.com> - 4.02.0-6
 - Fixes for ppc64/ppc64le (RHBZ#1156300).
 
 * Mon Oct 20 2014 Richard W.M. Jones <rjones at redhat.com> - 4.02.0-4


More information about the scm-commits mailing list