- Include svn rev 12548 to fix invalid generation of Thumb-2 branch
instruction TBH (upstream PR#5623, RHBZ#821153).
This commit is contained in:
parent
64a0f51339
commit
1296d4b409
@ -1,16 +1,19 @@
|
|||||||
From 5017142a41b2ea9b81d41ff7d513847b9df7bae9 Mon Sep 17 00:00:00 2001
|
From 22fadc3ed91cb380f7303e8a83ff5806d4576cb5 Mon Sep 17 00:00:00 2001
|
||||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
Date: Tue, 29 May 2012 20:50:42 +0100
|
Date: Tue, 29 May 2012 20:50:42 +0100
|
||||||
Subject: [PATCH 7/7] New ARM backend, written by Benedikt Meurer (PR#5433).
|
Subject: [PATCH] New ARM backend, written by Benedikt Meurer (PR#5433).
|
||||||
|
|
||||||
Backported from upstream sources to 3.12.1 by RWMJ.
|
Backported from upstream sources to 3.12.1 by RWMJ.
|
||||||
|
|
||||||
|
Includes svn rev 12548 to fix invalid generation of Thumb-2 branch
|
||||||
|
instruction TBH (upstream PR#5623, RHBZ#821153).
|
||||||
---
|
---
|
||||||
asmcomp/amd64/selection.ml | 14 +-
|
asmcomp/amd64/selection.ml | 14 +-
|
||||||
asmcomp/arm/arch.ml | 152 +++++++-
|
asmcomp/arm/arch.ml | 152 +++++++-
|
||||||
asmcomp/arm/emit.mlp | 850 ++++++++++++++++++++++++++++--------------
|
asmcomp/arm/emit.mlp | 857 ++++++++++++++++++++++++++++--------------
|
||||||
asmcomp/arm/proc.ml | 185 +++++++---
|
asmcomp/arm/proc.ml | 185 ++++++---
|
||||||
asmcomp/arm/reload.ml | 4 +-
|
asmcomp/arm/reload.ml | 4 +-
|
||||||
asmcomp/arm/scheduling.ml | 80 +++--
|
asmcomp/arm/scheduling.ml | 80 ++--
|
||||||
asmcomp/arm/selection.ml | 343 ++++++++++-------
|
asmcomp/arm/selection.ml | 343 ++++++++++-------
|
||||||
asmcomp/i386/selection.ml | 14 +-
|
asmcomp/i386/selection.ml | 14 +-
|
||||||
asmcomp/power/selection.ml | 2 +-
|
asmcomp/power/selection.ml | 2 +-
|
||||||
@ -21,7 +24,7 @@ Backported from upstream sources to 3.12.1 by RWMJ.
|
|||||||
asmrun/arm.S | 544 ++++++++++++++++-----------
|
asmrun/arm.S | 544 ++++++++++++++++-----------
|
||||||
asmrun/signals_osdep.h | 2 +-
|
asmrun/signals_osdep.h | 2 +-
|
||||||
configure | 11 +-
|
configure | 11 +-
|
||||||
16 files changed, 1477 insertions(+), 743 deletions(-)
|
16 files changed, 1485 insertions(+), 742 deletions(-)
|
||||||
|
|
||||||
diff --git a/asmcomp/amd64/selection.ml b/asmcomp/amd64/selection.ml
|
diff --git a/asmcomp/amd64/selection.ml b/asmcomp/amd64/selection.ml
|
||||||
index f0546cf..5d9f6fa 100644
|
index f0546cf..5d9f6fa 100644
|
||||||
@ -265,7 +268,7 @@ index 998fa4b..c4aca8d 100644
|
|||||||
+ done;
|
+ done;
|
||||||
+ !s <= m
|
+ !s <= m
|
||||||
diff --git a/asmcomp/arm/emit.mlp b/asmcomp/arm/emit.mlp
|
diff --git a/asmcomp/arm/emit.mlp b/asmcomp/arm/emit.mlp
|
||||||
index a4b2241..846ee4a 100644
|
index a4b2241..f8db396 100644
|
||||||
--- a/asmcomp/arm/emit.mlp
|
--- a/asmcomp/arm/emit.mlp
|
||||||
+++ b/asmcomp/arm/emit.mlp
|
+++ b/asmcomp/arm/emit.mlp
|
||||||
@@ -1,16 +1,17 @@
|
@@ -1,16 +1,17 @@
|
||||||
@ -1146,7 +1149,7 @@ index a4b2241..846ee4a 100644
|
|||||||
` cmp {emit_reg i.arg.(0)}, #1\n`;
|
` cmp {emit_reg i.arg.(0)}, #1\n`;
|
||||||
begin match lbl0 with
|
begin match lbl0 with
|
||||||
None -> ()
|
None -> ()
|
||||||
@@ -495,108 +732,135 @@ let emit_instr i =
|
@@ -495,108 +732,144 @@ let emit_instr i =
|
||||||
| Some lbl -> ` bgt {emit_label lbl}\n`
|
| Some lbl -> ` bgt {emit_label lbl}\n`
|
||||||
end;
|
end;
|
||||||
4
|
4
|
||||||
@ -1156,34 +1159,42 @@ index a4b2241..846ee4a 100644
|
|||||||
- for i = 0 to Array.length jumptbl - 1 do
|
- for i = 0 to Array.length jumptbl - 1 do
|
||||||
- ` .word {emit_label jumptbl.(i)}\n`
|
- ` .word {emit_label jumptbl.(i)}\n`
|
||||||
- done;
|
- done;
|
||||||
- 2 + Array.length jumptbl
|
|
||||||
+ | Lswitch jumptbl ->
|
+ | Lswitch jumptbl ->
|
||||||
+ if !arch > ARMv6 && !thumb then begin
|
+ if !arch > ARMv6 && !thumb then begin
|
||||||
+ let lbl = new_label() in
|
+ (* The Thumb-2 TBH instruction supports only forward branches,
|
||||||
+ ` tbh [pc, {emit_reg i.arg.(0)}]\n`;
|
+ so we need to generate appropriate trampolines for all labels
|
||||||
+ `{emit_label lbl}:`;
|
+ that appear before this switch instruction (PR#5623) *)
|
||||||
+ for i = 0 to Array.length jumptbl - 1 do
|
+ let tramtbl = Array.copy jumptbl in
|
||||||
+ ` .short ({emit_label jumptbl.(i)}-{emit_label lbl})/2\n`;
|
+ ` tbh [pc, {emit_reg i.arg.(0)}, lsl #1]\n`;
|
||||||
|
+ for j = 0 to Array.length tramtbl - 1 do
|
||||||
|
+ let rec label i =
|
||||||
|
+ match i.desc with
|
||||||
|
+ Lend -> new_label()
|
||||||
|
+ | Llabel lbl when lbl = tramtbl.(j) -> lbl
|
||||||
|
+ | _ -> label i.next in
|
||||||
|
+ tramtbl.(j) <- label i.next;
|
||||||
|
+ ` .short ({emit_label tramtbl.(j)}-.)/2+{emit_int j}\n`
|
||||||
+ done;
|
+ done;
|
||||||
+ ` .align 1\n`;
|
+ (* Generate the necessary trampolines *)
|
||||||
+ 2 + Array.length jumptbl / 2
|
+ for j = 0 to Array.length tramtbl - 1 do
|
||||||
|
+ if tramtbl.(j) <> jumptbl.(j) then
|
||||||
|
+ `{emit_label tramtbl.(j)}: b {emit_label jumptbl.(j)}\n`
|
||||||
|
+ done
|
||||||
|
+ end else if not !pic_code then begin
|
||||||
|
+ ` ldr pc, [pc, {emit_reg i.arg.(0)}, lsl #2]\n`;
|
||||||
|
+ ` nop\n`;
|
||||||
|
+ for j = 0 to Array.length jumptbl - 1 do
|
||||||
|
+ ` .word {emit_label jumptbl.(j)}\n`
|
||||||
|
+ done
|
||||||
+ end else begin
|
+ end else begin
|
||||||
+ if not !pic_code then begin
|
+ (* Slightly slower, but position-independent *)
|
||||||
+ ` ldr pc, [pc, {emit_reg i.arg.(0)}, lsl #2]\n`;
|
+ ` add pc, pc, {emit_reg i.arg.(0)}, lsl #2\n`;
|
||||||
+ ` nop\n`;
|
+ ` nop\n`;
|
||||||
+ for i = 0 to Array.length jumptbl - 1 do
|
+ for j = 0 to Array.length jumptbl - 1 do
|
||||||
+ ` .word {emit_label jumptbl.(i)}\n`
|
+ ` b {emit_label jumptbl.(j)}\n`
|
||||||
+ done
|
+ done
|
||||||
+ end else begin
|
+ end;
|
||||||
+ (* Slightly slower, but position-independent *)
|
2 + Array.length jumptbl
|
||||||
+ ` add pc, pc, {emit_reg i.arg.(0)}, lsl #2\n`;
|
|
||||||
+ ` nop\n`;
|
|
||||||
+ for i = 0 to Array.length jumptbl - 1 do
|
|
||||||
+ ` b {emit_label jumptbl.(i)}\n`
|
|
||||||
+ done
|
|
||||||
+ end;
|
|
||||||
+ 2 + Array.length jumptbl
|
|
||||||
+ end
|
|
||||||
| Lsetuptrap lbl ->
|
| Lsetuptrap lbl ->
|
||||||
` bl {emit_label lbl}\n`; 1
|
` bl {emit_label lbl}\n`; 1
|
||||||
| Lpushtrap ->
|
| Lpushtrap ->
|
||||||
@ -1339,7 +1350,7 @@ index a4b2241..846ee4a 100644
|
|||||||
|
|
||||||
let data l =
|
let data l =
|
||||||
` .data\n`;
|
` .data\n`;
|
||||||
@@ -605,32 +869,62 @@ let data l =
|
@@ -605,32 +878,62 @@ let data l =
|
||||||
(* Beginning / end of an assembly file *)
|
(* Beginning / end of an assembly file *)
|
||||||
|
|
||||||
let begin_assembly() =
|
let begin_assembly() =
|
||||||
@ -3092,5 +3103,5 @@ index 6ed0a9c..4e07c92 100755
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
--
|
--
|
||||||
1.7.7.6
|
1.7.10
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
Name: ocaml
|
Name: ocaml
|
||||||
Version: 3.12.1
|
Version: 3.12.1
|
||||||
Release: 8%{?dist}
|
Release: 9%{?dist}
|
||||||
|
|
||||||
Summary: Objective Caml compiler and programming environment
|
Summary: Objective Caml compiler and programming environment
|
||||||
|
|
||||||
@ -495,6 +495,10 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sun Jun 3 2012 Richard W.M. Jones <rjones@redhat.com> 3.12.1-9
|
||||||
|
- Include svn rev 12548 to fix invalid generation of Thumb-2 branch
|
||||||
|
instruction TBH (upstream PR#5623, RHBZ#821153).
|
||||||
|
|
||||||
* Wed May 29 2012 Richard W.M. Jones <rjones@redhat.com> 3.12.1-8
|
* Wed May 29 2012 Richard W.M. Jones <rjones@redhat.com> 3.12.1-8
|
||||||
- Modify the ppc64 patch to reduce the delta between power64 and
|
- Modify the ppc64 patch to reduce the delta between power64 and
|
||||||
upstream power backends.
|
upstream power backends.
|
||||||
|
Loading…
Reference in New Issue
Block a user