Merge lp:~ams-codesourcery/gcc-linaro/merge-fsf-4.5-20110505 into lp:gcc-linaro/4.5

Proposed by Andrew Stubbs
Status: Merged
Approved by: Richard Sandiford
Approved revision: no longer in the source branch.
Merged at revision: 99508
Proposed branch: lp:~ams-codesourcery/gcc-linaro/merge-fsf-4.5-20110505
Merge into: lp:gcc-linaro/4.5
Diff against target: 1318 lines (+566/-162)
33 files modified
ChangeLog.linaro (+4/-0)
gcc/BASE-VER (+1/-1)
gcc/ChangeLog (+117/-0)
gcc/DATESTAMP (+1/-1)
gcc/DEV-PHASE (+1/-0)
gcc/c-typeck.c (+1/-1)
gcc/config/arm/arm.c (+1/-1)
gcc/config/arm/neon.md (+20/-17)
gcc/config/i386/i386.c (+15/-2)
gcc/config/i386/i386.md (+53/-28)
gcc/config/i386/mmx.md (+4/-2)
gcc/config/i386/sse.md (+7/-6)
gcc/config/pa/pa-protos.h (+0/-2)
gcc/config/pa/pa.md (+5/-10)
gcc/config/pa/predicates.md (+9/-5)
gcc/cp/ChangeLog (+6/-0)
gcc/cp/parser.c (+1/-1)
gcc/df-problems.c (+3/-7)
gcc/final.c (+5/-0)
gcc/fold-const.c (+0/-2)
gcc/ifcvt.c (+12/-15)
gcc/testsuite/ChangeLog (+50/-0)
gcc/testsuite/g++.dg/parse/ambig6.C (+12/-0)
gcc/testsuite/gcc.c-torture/compile/pr48742.c (+15/-0)
gcc/testsuite/gcc.c-torture/execute/pr48809.c (+60/-0)
gcc/testsuite/gcc.dg/pr48685.c (+11/-0)
gcc/testsuite/gcc.dg/pr48774.c (+38/-0)
gcc/testsuite/gcc.target/arm/pr48252.c (+31/-0)
gcc/testsuite/gcc.target/i386/pr48708.c (+15/-0)
gcc/testsuite/gcc.target/i386/sse2-init-v2di-2.c (+2/-2)
gcc/tree-switch-conversion.c (+17/-41)
libffi/ChangeLog (+10/-0)
libffi/src/alpha/osf.S (+39/-18)
To merge this branch: bzr merge lp:~ams-codesourcery/gcc-linaro/merge-fsf-4.5-20110505
Reviewer Review Type Date Requested Status
Richard Sandiford Approve
Review via email: mp+60071@code.launchpad.net

Description of the change

Merge from FSF GCC 4.5 branch.

To post a comment you must log in.
Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild has taken a snapshot of this branch at r99506 and queued it for build.

The snapshot is available at:
 http://ex.seabright.co.nz/snapshots/gcc-linaro-4.5+bzr99506~ams-codesourcery~merge-fsf-4.5-20110505.tar.xdelta3.xz

and will be built on the following builders:
 a9-builder i686 x86_64

You can track the build queue at:
 http://ex.seabright.co.nz/helpers/scheduler

cbuild-snapshot: gcc-linaro-4.5+bzr99506~ams-codesourcery~merge-fsf-4.5-20110505
cbuild-ancestor: lp:gcc-linaro+bzr99505
cbuild-state: check

Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild successfully built this on i686-lucid-cbuild114-scorpius-i686r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99506~ams-codesourcery~merge-fsf-4.5-20110505/logs/i686-lucid-cbuild114-scorpius-i686r1

The test suite results changed compared to the branch point lp:gcc-linaro+bzr99505:
 +PASS: gcc.c-torture/compile/pr48742.c -O0 (test for excess errors)
 +PASS: gcc.c-torture/compile/pr48742.c -O1 (test for excess errors)
 +PASS: gcc.c-torture/compile/pr48742.c -O2 -flto (test for excess errors)
 +PASS: gcc.c-torture/compile/pr48742.c -O2 -fwhopr (test for excess errors)
 +PASS: gcc.c-torture/compile/pr48742.c -O2 (test for excess errors)
 +PASS: gcc.c-torture/compile/pr48742.c -O3 -fomit-frame-pointer (test for excess errors)
 +PASS: gcc.c-torture/compile/pr48742.c -O3 -g (test for excess errors)
 +PASS: gcc.c-torture/compile/pr48742.c -Os (test for excess errors)
 +PASS: gcc.c-torture/execute/pr48809.c compilation, -O0
 +PASS: gcc.c-torture/execute/pr48809.c compilation, -O1
 +PASS: gcc.c-torture/execute/pr48809.c compilation, -O2
 +PASS: gcc.c-torture/execute/pr48809.c compilation, -O2 -flto
 +PASS: gcc.c-torture/execute/pr48809.c compilation, -O2 -fwhopr
 +PASS: gcc.c-torture/execute/pr48809.c compilation, -O3 -fomit-frame-pointer
 +PASS: gcc.c-torture/execute/pr48809.c compilation, -O3 -g
 +PASS: gcc.c-torture/execute/pr48809.c compilation, -Os
 +PASS: gcc.c-torture/execute/pr48809.c execution, -O0
 +PASS: gcc.c-torture/execute/pr48809.c execution, -O1
 +PASS: gcc.c-torture/execute/pr48809.c execution, -O2
 ...and 13 more

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99506~ams-codesourcery~merge-fsf-4.5-20110505/logs/i686-lucid-cbuild114-scorpius-i686r1/gcc-testsuite.txt

cbuild-checked: i686-lucid-cbuild114-scorpius-i686r1

Revision history for this message
Ramana Radhakrishnan (ramana) wrote :

Andrew - Could you check the 13 more ?

Ramana

Revision history for this message
Andrew Stubbs (ams-codesourcery) wrote :

> Andrew - Could you check the 13 more ?

They're all PASSes.

Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild successfully built this on armv7l-maverick-cbuild114-ursa4-cortexa9r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99506~ams-codesourcery~merge-fsf-4.5-20110505/logs/armv7l-maverick-cbuild114-ursa4-cortexa9r1

The test suite results changed compared to the branch point lp:gcc-linaro+bzr99505:
 +PASS: gcc.c-torture/compile/pr48742.c -O0 (test for excess errors)
 +PASS: gcc.c-torture/compile/pr48742.c -O1 (test for excess errors)
 +PASS: gcc.c-torture/compile/pr48742.c -O2 -flto (test for excess errors)
 +PASS: gcc.c-torture/compile/pr48742.c -O2 -fwhopr (test for excess errors)
 +PASS: gcc.c-torture/compile/pr48742.c -O2 (test for excess errors)
 +PASS: gcc.c-torture/compile/pr48742.c -O3 -fomit-frame-pointer (test for excess errors)
 +PASS: gcc.c-torture/compile/pr48742.c -O3 -g (test for excess errors)
 +PASS: gcc.c-torture/compile/pr48742.c -Os (test for excess errors)
 +PASS: gcc.c-torture/execute/pr48809.c compilation, -O0
 +PASS: gcc.c-torture/execute/pr48809.c compilation, -O1
 +PASS: gcc.c-torture/execute/pr48809.c compilation, -O2
 +PASS: gcc.c-torture/execute/pr48809.c compilation, -O2 -flto
 +PASS: gcc.c-torture/execute/pr48809.c compilation, -O2 -fwhopr
 +PASS: gcc.c-torture/execute/pr48809.c compilation, -O3 -fomit-frame-pointer
 +PASS: gcc.c-torture/execute/pr48809.c compilation, -O3 -g
 +PASS: gcc.c-torture/execute/pr48809.c compilation, -Os
 +PASS: gcc.c-torture/execute/pr48809.c execution, -O0
 +PASS: gcc.c-torture/execute/pr48809.c execution, -O1
 +PASS: gcc.c-torture/execute/pr48809.c execution, -O2
 ...and 14 more

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99506~ams-codesourcery~merge-fsf-4.5-20110505/logs/armv7l-maverick-cbuild114-ursa4-cortexa9r1/gcc-testsuite.txt

cbuild-checked: armv7l-maverick-cbuild114-ursa4-cortexa9r1

Revision history for this message
Richard Sandiford (rsandifo) wrote :

Not sure whether we're doing reviews for upstream merges,
but just in case: OK if you're happy with the elided results.

review: Approve
Revision history for this message
Andrew Stubbs (ams-codesourcery) wrote :

i686 and ARM test results are OK.

Still waiting for x86_64 .....

Revision history for this message
Andrew Stubbs (ams-codesourcery) wrote :

Ok, I'm bored of waiting, the x86_64 machine has been disrupted by UDS, and I want this merged before the very last minute. I'm going to merge it, and if there's a problem, I'll revert it later.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'ChangeLog.linaro'
--- ChangeLog.linaro 2011-05-04 09:21:34 +0000
+++ ChangeLog.linaro 2011-05-05 15:18:28 +0000
@@ -1,3 +1,7 @@
12011-05-05 Andrew Stubbs <ams@codesourcery.com>
2
3 Merge from FSF 4.5 branch r173417 (pre 4.5.4).
4
12011-04-28 Andrew Stubbs <ams@codesourcery.com>52011-04-28 Andrew Stubbs <ams@codesourcery.com>
26
3 Merge from FSF 4.5 branch r173113 (4.5.3 release).7 Merge from FSF 4.5 branch r173113 (4.5.3 release).
48
=== modified file 'gcc/BASE-VER'
--- gcc/BASE-VER 2010-12-16 14:34:03 +0000
+++ gcc/BASE-VER 2011-05-05 15:18:28 +0000
@@ -1,1 +1,1 @@
14.5.314.5.4
22
=== modified file 'gcc/ChangeLog'
--- gcc/ChangeLog 2011-04-28 14:11:53 +0000
+++ gcc/ChangeLog 2011-05-05 15:18:28 +0000
@@ -1,3 +1,120 @@
12010-05-05 Ira Rosen <ira.rosen@linaro.org>
2
3 Backport from mainline:
4 2011-04-18 Ulrich Weigand <ulrich.weigand@linaro.org>
5 Ira Rosen <ira.rosen@linaro.org>
6
7 PR target/48252
8 * config/arm/arm.c (neon_emit_pair_result_insn): Swap arguments
9 to match neon_vzip/vuzp/vtrn_internal.
10 * config/arm/neon.md (neon_vtrn<mode>_internal): Make both
11 outputs explicitly dependent on both inputs.
12 (neon_vzip<mode>_internal, neon_vuzp<mode>_internal): Likewise.
13
142011-05-04 Uros Bizjak <ubizjak@gmail.com>
15
16 Backport from mainline
17 2011-04-21 Uros Bizjak <ubizjak@gmail.com>
18
19 PR target/48708
20 * config/i386/i386.c (ix86_expand_vector_set) <V2DImode>: Generate
21 vec_extract and vec_concat for non-SSE4_1 targets.
22
232011-05-04 Uros Bizjak <ubizjak@gmail.com>
24
25 * config/i386/i386.md (*movdi_internal_rex64) <TYPE_SSEMOV>:
26 Use %v prefix in insn mnemonic to handle TARGET_AVX.
27 (*movdi_internal): Use "maybe_vex" instead of "vex" in "prefix"
28 attribute calculation.
29 (*movdf_internal): Output AVX mnemonics. Add "prefix" attribute.
30 * config/i386/sse.md (*sse2_storeq_rex64): Do not emit %v prefix
31 for mov{q} mnemonic.
32 (*vec_extractv2di_1_rex64_avx): Ditto.
33 (*vec_concatv2di_rex64_sse4_1): Use %vmovd for reg<->xmm moves.
34 (*vec_concatv2di_rex64_sse): Use movd for reg<->xmm moves.
35 * config/i386/mmx.md (*mov<mode>_internal_rex64): Ditto.
36
372011-05-03 Uros Bizjak <ubizjak@gmail.com>
38 Jakub Jelinek <jakub@redhat.com>
39
40 PR target/48774
41 * config/i386/i386.c (ix86_match_ccmode): For CC{A,C,O,S}mode
42 only succeed if req_mode is the same as set_mode.
43
442011-05-03 Jakub Jelinek <jakub@redhat.com>
45
46 Backport from mainline
47 2011-04-30 Jakub Jelinek <jakub@redhat.com>
48
49 PR tree-optimization/48809
50 * tree-switch-conversion.c (build_arrays): Compute tidx in unsigned
51 type.
52 (gen_inbound_check): Don't compute index_expr - range_min in utype
53 again, instead reuse SSA_NAME initialized in build_arrays.
54 Remove two useless gsi_for_stmt calls.
55
56 2011-04-28 Jakub Jelinek <jakub@redhat.com>
57
58 PR middle-end/48597
59 * final.c (final_scan_insn): Call dwarf2out_frame_debug even for
60 inline asm.
61
62 2011-04-27 Jakub Jelinek <jakub@redhat.com>
63
64 PR c/48742
65 * c-typeck.c (build_binary_op): Don't wrap arguments if
66 int_operands is true.
67
68 2011-04-23 Jakub Jelinek <jakub@redhat.com>
69
70 PR c/48685
71 * fold-const.c (fold_convert_loc): Add NOP_EXPR when casting
72 to VOID_TYPE even around MODIFY_EXPR.
73
742011-05-02 Ulrich Weigand <ulrich.weigand@linaro.org>
75
76 PR middle-end/43085
77 Backport from mainline:
78
79 2010-04-29 Bernd Schmidt <bernds@codesourcery.com>
80
81 From Dominique d'Humieres <dominiq@lps.ens.fr>
82 PR bootstrap/43858
83 * ifcvt.c (dead_or_predicable): Use df_simulate_find_defs to compute
84 test_set.
85
86 2010-04-26 Bernd Schmidt <bernds@codesourcery.com>
87
88 * df-problems.c (df_simulate_initialize_forwards): Set, don't clear,
89 bits for artificial defs at the top of the block.
90 * fwprop.c (single_def_use_enter_block): Don't call it.
91
92 2010-04-22 Bernd Schmidt <bernds@codesourcery.com>
93
94 * ifcvt.c (dead_or_predicable): Use df_simulate_find_defs and
95 df_simulate_find_noclobber_defs as appropriate. Keep track of an
96 extra set merge_set_noclobber, and use it to relax the final test
97 slightly.
98 * df.h (df_simulate_find_noclobber_defs): Declare.
99 * df-problems.c (df_simulate_find_defs): Don't ignore partial or
100 conditional defs.
101 (df_simulate_find_noclobber_defs): New function.
102
1032011-04-29 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
104
105 PR target/48288
106 * config/pa/predicates.md (ior_operand): Delete predicate.
107 (cint_ior_operand, reg_or_cint_ior_operand): New predicates.
108 * config/pa/pa.md (iordi3): Use reg_or_cint_ior_operand predicate in
109 expander. Use cint_ior_operand in unnamed insn.
110 (iorsi3): Likewise.
111 * config/pa/pa-protos.h (ior_operand): Delete declarations.
112
1132011-04-28 Richard Guenther <rguenther@suse.de>
114
115 * DEV-PHASE: Set back to prerelease.
116 * BASE-VER: Bump to 4.5.4.
117
12011-04-28 Release Manager1182011-04-28 Release Manager
2119
3 * GCC 4.5.3 released.120 * GCC 4.5.3 released.
4121
=== modified file 'gcc/DATESTAMP'
--- gcc/DATESTAMP 2011-04-28 00:17:54 +0000
+++ gcc/DATESTAMP 2011-05-05 15:18:28 +0000
@@ -1,1 +1,1 @@
120110428120110505
22
=== modified file 'gcc/DEV-PHASE'
--- gcc/DEV-PHASE 2011-04-28 16:13:24 +0000
+++ gcc/DEV-PHASE 2011-05-05 15:18:28 +0000
@@ -0,0 +1,1 @@
1prerelease
02
=== modified file 'gcc/c-typeck.c'
--- gcc/c-typeck.c 2011-02-22 11:38:56 +0000
+++ gcc/c-typeck.c 2011-05-05 15:18:28 +0000
@@ -9816,7 +9816,7 @@
9816 warn_for_sign_compare (location, orig_op0_folded,9816 warn_for_sign_compare (location, orig_op0_folded,
9817 orig_op1_folded, op0, op1,9817 orig_op1_folded, op0, op1,
9818 result_type, resultcode);9818 result_type, resultcode);
9819 if (!in_late_binary_op)9819 if (!in_late_binary_op && !int_operands)
9820 {9820 {
9821 if (!op0_maybe_const || TREE_CODE (op0) != INTEGER_CST)9821 if (!op0_maybe_const || TREE_CODE (op0) != INTEGER_CST)
9822 op0 = c_wrap_maybe_const (op0, !op0_maybe_const);9822 op0 = c_wrap_maybe_const (op0, !op0_maybe_const);
98239823
=== modified file 'gcc/config/arm/arm.c'
--- gcc/config/arm/arm.c 2011-04-20 10:10:50 +0000
+++ gcc/config/arm/arm.c 2011-05-05 15:18:28 +0000
@@ -19823,7 +19823,7 @@
19823 rtx tmp1 = gen_reg_rtx (mode);19823 rtx tmp1 = gen_reg_rtx (mode);
19824 rtx tmp2 = gen_reg_rtx (mode);19824 rtx tmp2 = gen_reg_rtx (mode);
1982519825
19826 emit_insn (intfn (tmp1, op1, tmp2, op2));19826 emit_insn (intfn (tmp1, op1, op2, tmp2));
1982719827
19828 emit_move_insn (mem, tmp1);19828 emit_move_insn (mem, tmp1);
19829 mem = adjust_address (mem, mode, GET_MODE_SIZE (mode));19829 mem = adjust_address (mem, mode, GET_MODE_SIZE (mode));
1983019830
=== modified file 'gcc/config/arm/neon.md'
--- gcc/config/arm/neon.md 2011-04-20 10:00:39 +0000
+++ gcc/config/arm/neon.md 2011-05-05 15:18:28 +0000
@@ -4397,13 +4397,14 @@
43974397
4398(define_insn "neon_vtrn<mode>_internal"4398(define_insn "neon_vtrn<mode>_internal"
4399 [(set (match_operand:VDQW 0 "s_register_operand" "=w")4399 [(set (match_operand:VDQW 0 "s_register_operand" "=w")
4400 (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")]4400 (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")
4401 UNSPEC_VTRN1))4401 (match_operand:VDQW 2 "s_register_operand" "w")]
4402 (set (match_operand:VDQW 2 "s_register_operand" "=w")4402 UNSPEC_VTRN1))
4403 (unspec:VDQW [(match_operand:VDQW 3 "s_register_operand" "2")]4403 (set (match_operand:VDQW 3 "s_register_operand" "=2")
4404 UNSPEC_VTRN2))]4404 (unspec:VDQW [(match_dup 1) (match_dup 2)]
4405 UNSPEC_VTRN2))]
4405 "TARGET_NEON"4406 "TARGET_NEON"
4406 "vtrn.<V_sz_elem>\t%<V_reg>0, %<V_reg>2"4407 "vtrn.<V_sz_elem>\t%<V_reg>0, %<V_reg>3"
4407 [(set (attr "neon_type")4408 [(set (attr "neon_type")
4408 (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))4409 (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
4409 (const_string "neon_bp_simple")4410 (const_string "neon_bp_simple")
@@ -4423,13 +4424,14 @@
44234424
4424(define_insn "neon_vzip<mode>_internal"4425(define_insn "neon_vzip<mode>_internal"
4425 [(set (match_operand:VDQW 0 "s_register_operand" "=w")4426 [(set (match_operand:VDQW 0 "s_register_operand" "=w")
4426 (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")]4427 (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")
4427 UNSPEC_VZIP1))4428 (match_operand:VDQW 2 "s_register_operand" "w")]
4428 (set (match_operand:VDQW 2 "s_register_operand" "=w")4429 UNSPEC_VZIP1))
4429 (unspec:VDQW [(match_operand:VDQW 3 "s_register_operand" "2")]4430 (set (match_operand:VDQW 3 "s_register_operand" "=2")
4430 UNSPEC_VZIP2))]4431 (unspec:VDQW [(match_dup 1) (match_dup 2)]
4432 UNSPEC_VZIP2))]
4431 "TARGET_NEON"4433 "TARGET_NEON"
4432 "vzip.<V_sz_elem>\t%<V_reg>0, %<V_reg>2"4434 "vzip.<V_sz_elem>\t%<V_reg>0, %<V_reg>3"
4433 [(set (attr "neon_type")4435 [(set (attr "neon_type")
4434 (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))4436 (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
4435 (const_string "neon_bp_simple")4437 (const_string "neon_bp_simple")
@@ -4449,13 +4451,14 @@
44494451
4450(define_insn "neon_vuzp<mode>_internal"4452(define_insn "neon_vuzp<mode>_internal"
4451 [(set (match_operand:VDQW 0 "s_register_operand" "=w")4453 [(set (match_operand:VDQW 0 "s_register_operand" "=w")
4452 (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")]4454 (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")
4455 (match_operand:VDQW 2 "s_register_operand" "w")]
4453 UNSPEC_VUZP1))4456 UNSPEC_VUZP1))
4454 (set (match_operand:VDQW 2 "s_register_operand" "=w")4457 (set (match_operand:VDQW 3 "s_register_operand" "=2")
4455 (unspec:VDQW [(match_operand:VDQW 3 "s_register_operand" "2")]4458 (unspec:VDQW [(match_dup 1) (match_dup 2)]
4456 UNSPEC_VUZP2))]4459 UNSPEC_VUZP2))]
4457 "TARGET_NEON"4460 "TARGET_NEON"
4458 "vuzp.<V_sz_elem>\t%<V_reg>0, %<V_reg>2"4461 "vuzp.<V_sz_elem>\t%<V_reg>0, %<V_reg>3"
4459 [(set (attr "neon_type")4462 [(set (attr "neon_type")
4460 (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))4463 (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
4461 (const_string "neon_bp_simple")4464 (const_string "neon_bp_simple")
44624465
=== modified file 'gcc/config/i386/i386.c'
--- gcc/config/i386/i386.c 2011-02-22 11:38:56 +0000
+++ gcc/config/i386/i386.c 2011-05-05 15:18:28 +0000
@@ -14587,11 +14587,15 @@
14587 if (req_mode == CCZmode)14587 if (req_mode == CCZmode)
14588 return 0;14588 return 0;
14589 /* FALLTHRU */14589 /* FALLTHRU */
14590 case CCZmode:
14591 break;
14592
14590 case CCAmode:14593 case CCAmode:
14591 case CCCmode:14594 case CCCmode:
14592 case CCOmode:14595 case CCOmode:
14593 case CCSmode:14596 case CCSmode:
14594 case CCZmode:14597 if (set_mode != req_mode)
14598 return 0;
14595 break;14599 break;
1459614600
14597 default:14601 default:
@@ -27691,10 +27695,19 @@
27691 break;27695 break;
2769227696
27693 case V2DImode:27697 case V2DImode:
27694 use_vec_merge = TARGET_SSE4_1;27698 use_vec_merge = TARGET_SSE4_1 && TARGET_64BIT;
27695 if (use_vec_merge)27699 if (use_vec_merge)
27696 break;27700 break;
2769727701
27702 tmp = gen_reg_rtx (GET_MODE_INNER (mode));
27703 ix86_expand_vector_extract (false, tmp, target, 1 - elt);
27704 if (elt == 0)
27705 tmp = gen_rtx_VEC_CONCAT (mode, tmp, val);
27706 else
27707 tmp = gen_rtx_VEC_CONCAT (mode, val, tmp);
27708 emit_insn (gen_rtx_SET (VOIDmode, target, tmp));
27709 return;
27710
27698 case V2DFmode:27711 case V2DFmode:
27699 {27712 {
27700 rtx op0, op1;27713 rtx op0, op1;
2770127714
=== modified file 'gcc/config/i386/i386.md'
--- gcc/config/i386/i386.md 2011-02-22 11:38:56 +0000
+++ gcc/config/i386/i386.md 2011-05-05 15:18:28 +0000
@@ -2429,7 +2429,7 @@
2429 [(set_attr "type" "*,*,mmx,mmxmov,mmxmov,sselog1,ssemov,ssemov,ssemov,sselog1,ssemov,ssemov,ssemov")2429 [(set_attr "type" "*,*,mmx,mmxmov,mmxmov,sselog1,ssemov,ssemov,ssemov,sselog1,ssemov,ssemov,ssemov")
2430 (set (attr "prefix")2430 (set (attr "prefix")
2431 (if_then_else (eq_attr "alternative" "5,6,7,8")2431 (if_then_else (eq_attr "alternative" "5,6,7,8")
2432 (const_string "vex")2432 (const_string "maybe_vex")
2433 (const_string "orig")))2433 (const_string "orig")))
2434 (set_attr "mode" "DI,DI,DI,DI,DI,TI,DI,TI,DI,V4SF,V2SF,V4SF,V2SF")])2434 (set_attr "mode" "DI,DI,DI,DI,DI,TI,DI,TI,DI,V4SF,V2SF,V4SF,V2SF")])
24352435
@@ -2467,21 +2467,15 @@
2467 return "movdq2q\t{%1, %0|%0, %1}";2467 return "movdq2q\t{%1, %0|%0, %1}";
24682468
2469 case TYPE_SSEMOV:2469 case TYPE_SSEMOV:
2470 if (TARGET_AVX)
2471 {
2472 if (get_attr_mode (insn) == MODE_TI)
2473 return "vmovdqa\t{%1, %0|%0, %1}";
2474 else
2475 return "vmovq\t{%1, %0|%0, %1}";
2476 }
2477
2478 if (get_attr_mode (insn) == MODE_TI)2470 if (get_attr_mode (insn) == MODE_TI)
2479 return "movdqa\t{%1, %0|%0, %1}";2471 return "%vmovdqa\t{%1, %0|%0, %1}";
2480 /* FALLTHRU */2472 /* Handle broken assemblers that require movd instead of movq. */
2473 if (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1]))
2474 return "%vmovd\t{%1, %0|%0, %1}";
2475 return "%vmovq\t{%1, %0|%0, %1}";
24812476
2482 case TYPE_MMXMOV:2477 case TYPE_MMXMOV:
2483 /* Moves from and into integer register is done using movd2478 /* Handle broken assemblers that require movd instead of movq. */
2484 opcode with REX prefix. */
2485 if (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1]))2479 if (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1]))
2486 return "movd\t{%1, %0|%0, %1}";2480 return "movd\t{%1, %0|%0, %1}";
2487 return "movq\t{%1, %0|%0, %1}";2481 return "movq\t{%1, %0|%0, %1}";
@@ -2914,12 +2908,13 @@
29142908
2915 case 9: case 10: case 14: case 15:2909 case 9: case 10: case 14: case 15:
2916 return "movd\t{%1, %0|%0, %1}";2910 return "movd\t{%1, %0|%0, %1}";
2911
2912 case 11:
2913 return "movq\t{%1, %0|%0, %1}";
2914
2917 case 12: case 13:2915 case 12: case 13:
2918 return "%vmovd\t{%1, %0|%0, %1}";2916 return "%vmovd\t{%1, %0|%0, %1}";
29192917
2920 case 11:
2921 return "movq\t{%1, %0|%0, %1}";
2922
2923 default:2918 default:
2924 gcc_unreachable ();2919 gcc_unreachable ();
2925 }2920 }
@@ -3066,6 +3061,7 @@
3066 case 3:3061 case 3:
3067 case 4:3062 case 4:
3068 return "#";3063 return "#";
3064
3069 case 5:3065 case 5:
3070 switch (get_attr_mode (insn))3066 switch (get_attr_mode (insn))
3071 {3067 {
@@ -3261,7 +3257,8 @@
32613257
3262 case 9:3258 case 9:
3263 case 10:3259 case 10:
3264 return "%vmovd\t{%1, %0|%0, %1}";3260 /* Handle broken assemblers that require movd instead of movq. */
3261 return "%vmovd\t{%1, %0|%0, %1}";
32653262
3266 default:3263 default:
3267 gcc_unreachable();3264 gcc_unreachable();
@@ -3360,11 +3357,11 @@
3360 switch (get_attr_mode (insn))3357 switch (get_attr_mode (insn))
3361 {3358 {
3362 case MODE_V4SF:3359 case MODE_V4SF:
3363 return "xorps\t%0, %0";3360 return "%vxorps\t%0, %d0";
3364 case MODE_V2DF:3361 case MODE_V2DF:
3365 return "xorpd\t%0, %0";3362 return "%vxorpd\t%0, %d0";
3366 case MODE_TI:3363 case MODE_TI:
3367 return "pxor\t%0, %0";3364 return "%vpxor\t%0, %d0";
3368 default:3365 default:
3369 gcc_unreachable ();3366 gcc_unreachable ();
3370 }3367 }
@@ -3374,28 +3371,56 @@
3374 switch (get_attr_mode (insn))3371 switch (get_attr_mode (insn))
3375 {3372 {
3376 case MODE_V4SF:3373 case MODE_V4SF:
3377 return "movaps\t{%1, %0|%0, %1}";3374 return "%vmovaps\t{%1, %0|%0, %1}";
3378 case MODE_V2DF:3375 case MODE_V2DF:
3379 return "movapd\t{%1, %0|%0, %1}";3376 return "%vmovapd\t{%1, %0|%0, %1}";
3380 case MODE_TI:3377 case MODE_TI:
3381 return "movdqa\t{%1, %0|%0, %1}";3378 return "%vmovdqa\t{%1, %0|%0, %1}";
3382 case MODE_DI:3379 case MODE_DI:
3383 return "movq\t{%1, %0|%0, %1}";3380 return "%vmovq\t{%1, %0|%0, %1}";
3384 case MODE_DF:3381 case MODE_DF:
3385 return "movsd\t{%1, %0|%0, %1}";3382 if (TARGET_AVX)
3383 {
3384 if (REG_P (operands[0]) && REG_P (operands[1]))
3385 return "vmovsd\t{%1, %0, %0|%0, %0, %1}";
3386 else
3387 return "vmovsd\t{%1, %0|%0, %1}";
3388 }
3389 else
3390 return "movsd\t{%1, %0|%0, %1}";
3386 case MODE_V1DF:3391 case MODE_V1DF:
3387 return "movlpd\t{%1, %0|%0, %1}";3392 if (TARGET_AVX)
3393 {
3394 if (REG_P (operands[0]))
3395 return "vmovlpd\t{%1, %0, %0|%0, %0, %1}";
3396 else
3397 return "vmovlpd\t{%1, %0|%0, %1}";
3398 }
3399 else
3400 return "movlpd\t{%1, %0|%0, %1}";
3388 case MODE_V2SF:3401 case MODE_V2SF:
3389 return "movlps\t{%1, %0|%0, %1}";3402 if (TARGET_AVX)
3403 {
3404 if (REG_P (operands[0]))
3405 return "vmovlps\t{%1, %0, %0|%0, %0, %1}";
3406 else
3407 return "vmovlps\t{%1, %0|%0, %1}";
3408 }
3409 else
3410 return "movlps\t{%1, %0|%0, %1}";
3390 default:3411 default:
3391 gcc_unreachable ();3412 gcc_unreachable ();
3392 }3413 }
33933414
3394 default:3415 default:
3395 gcc_unreachable();3416 gcc_unreachable ();
3396 }3417 }
3397}3418}
3398 [(set_attr "type" "fmov,fmov,fmov,multi,multi,sselog1,ssemov,ssemov,ssemov")3419 [(set_attr "type" "fmov,fmov,fmov,multi,multi,sselog1,ssemov,ssemov,ssemov")
3420 (set (attr "prefix")
3421 (if_then_else (eq_attr "alternative" "0,1,2,3,4")
3422 (const_string "orig")
3423 (const_string "maybe_vex")))
3399 (set (attr "prefix_data16")3424 (set (attr "prefix_data16")
3400 (if_then_else (eq_attr "mode" "V1DF")3425 (if_then_else (eq_attr "mode" "V1DF")
3401 (const_string "1")3426 (const_string "1")
34023427
=== modified file 'gcc/config/i386/mmx.md'
--- gcc/config/i386/mmx.md 2009-12-30 11:07:12 +0000
+++ gcc/config/i386/mmx.md 2011-05-05 15:18:28 +0000
@@ -63,6 +63,7 @@
63 DONE;63 DONE;
64})64})
6565
66;; movd instead of movq is required to handle broken assemblers.
66(define_insn "*mov<mode>_internal_rex64"67(define_insn "*mov<mode>_internal_rex64"
67 [(set (match_operand:MMXMODEI8 0 "nonimmediate_operand"68 [(set (match_operand:MMXMODEI8 0 "nonimmediate_operand"
68 "=rm,r,!?y,!?y ,m ,!y,*Y2,x,x ,m,r,Yi")69 "=rm,r,!?y,!?y ,m ,!y,*Y2,x,x ,m,r,Yi")
@@ -81,8 +82,8 @@
81 %vpxor\t%0, %d082 %vpxor\t%0, %d0
82 %vmovq\t{%1, %0|%0, %1}83 %vmovq\t{%1, %0|%0, %1}
83 %vmovq\t{%1, %0|%0, %1}84 %vmovq\t{%1, %0|%0, %1}
84 %vmovq\t{%1, %0|%0, %1}85 %vmovd\t{%1, %0|%0, %1}
85 %vmovq\t{%1, %0|%0, %1}"86 %vmovd\t{%1, %0|%0, %1}"
86 [(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,ssemov")87 [(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,ssemov")
87 (set_attr "unit" "*,*,*,*,*,mmx,mmx,*,*,*,*,*")88 (set_attr "unit" "*,*,*,*,*,mmx,mmx,*,*,*,*,*")
88 (set_attr "prefix_rep" "*,*,*,*,*,1,1,*,1,*,*,*")89 (set_attr "prefix_rep" "*,*,*,*,*,1,1,*,1,*,*,*")
@@ -192,6 +193,7 @@
192 (const_string "orig")))193 (const_string "orig")))
193 (set_attr "mode" "DI,DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])194 (set_attr "mode" "DI,DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])
194195
196;; movd instead of movq is required to handle broken assemblers.
195(define_insn "*movv2sf_internal_rex64"197(define_insn "*movv2sf_internal_rex64"
196 [(set (match_operand:V2SF 0 "nonimmediate_operand"198 [(set (match_operand:V2SF 0 "nonimmediate_operand"
197 "=rm,r ,!?y,!?y ,m ,!y,*Y2,x,x,x,m,r,Yi")199 "=rm,r ,!?y,!?y ,m ,!y,*Y2,x,x,x,m,r,Yi")
198200
=== modified file 'gcc/config/i386/sse.md'
--- gcc/config/i386/sse.md 2011-04-16 07:53:39 +0000
+++ gcc/config/i386/sse.md 2011-05-05 15:18:28 +0000
@@ -7473,9 +7473,8 @@
7473 "@7473 "@
7474 #7474 #
7475 #7475 #
7476 %vmov{q}\t{%1, %0|%0, %1}"7476 mov{q}\t{%1, %0|%0, %1}"
7477 [(set_attr "type" "*,*,imov")7477 [(set_attr "type" "*,*,imov")
7478 (set_attr "prefix" "*,*,maybe_vex")
7479 (set_attr "mode" "*,*,DI")])7478 (set_attr "mode" "*,*,DI")])
74807479
7481(define_insn "*sse2_storeq"7480(define_insn "*sse2_storeq"
@@ -7513,11 +7512,11 @@
7513 vmovhps\t{%1, %0|%0, %1}7512 vmovhps\t{%1, %0|%0, %1}
7514 vpsrldq\t{$8, %1, %0|%0, %1, 8}7513 vpsrldq\t{$8, %1, %0|%0, %1, 8}
7515 vmovq\t{%H1, %0|%0, %H1}7514 vmovq\t{%H1, %0|%0, %H1}
7516 vmov{q}\t{%H1, %0|%0, %H1}"7515 mov{q}\t{%H1, %0|%0, %H1}"
7517 [(set_attr "type" "ssemov,sseishft1,ssemov,imov")7516 [(set_attr "type" "ssemov,sseishft1,ssemov,imov")
7518 (set_attr "length_immediate" "*,1,*,*")7517 (set_attr "length_immediate" "*,1,*,*")
7519 (set_attr "memory" "*,none,*,*")7518 (set_attr "memory" "*,none,*,*")
7520 (set_attr "prefix" "vex")7519 (set_attr "prefix" "vex,vex,vex,orig")
7521 (set_attr "mode" "V2SF,TI,TI,DI")])7520 (set_attr "mode" "V2SF,TI,TI,DI")])
75227521
7523(define_insn "*vec_extractv2di_1_rex64"7522(define_insn "*vec_extractv2di_1_rex64"
@@ -7795,6 +7794,7 @@
7795 (const_string "vex")))7794 (const_string "vex")))
7796 (set_attr "mode" "TI,TI,TI,TI,TI,V2SF")])7795 (set_attr "mode" "TI,TI,TI,TI,TI,V2SF")])
77977796
7797;; movd instead of movq is required to handle broken assemblers.
7798(define_insn "*vec_concatv2di_rex64_sse4_1"7798(define_insn "*vec_concatv2di_rex64_sse4_1"
7799 [(set (match_operand:V2DI 0 "register_operand" "=x ,x ,Yi,!x,x,x,x")7799 [(set (match_operand:V2DI 0 "register_operand" "=x ,x ,Yi,!x,x,x,x")
7800 (vec_concat:V2DI7800 (vec_concat:V2DI
@@ -7804,7 +7804,7 @@
7804 "@7804 "@
7805 pinsrq\t{$0x1, %2, %0|%0, %2, 0x1}7805 pinsrq\t{$0x1, %2, %0|%0, %2, 0x1}
7806 movq\t{%1, %0|%0, %1}7806 movq\t{%1, %0|%0, %1}
7807 movq\t{%1, %0|%0, %1}7807 movd\t{%1, %0|%0, %1}
7808 movq2dq\t{%1, %0|%0, %1}7808 movq2dq\t{%1, %0|%0, %1}
7809 punpcklqdq\t{%2, %0|%0, %2}7809 punpcklqdq\t{%2, %0|%0, %2}
7810 movlhps\t{%2, %0|%0, %2}7810 movlhps\t{%2, %0|%0, %2}
@@ -7815,6 +7815,7 @@
7815 (set_attr "length_immediate" "1,*,*,*,*,*,*")7815 (set_attr "length_immediate" "1,*,*,*,*,*,*")
7816 (set_attr "mode" "TI,TI,TI,TI,TI,V4SF,V2SF")])7816 (set_attr "mode" "TI,TI,TI,TI,TI,V4SF,V2SF")])
78177817
7818;; movd instead of movq is required to handle broken assemblers.
7818(define_insn "*vec_concatv2di_rex64_sse"7819(define_insn "*vec_concatv2di_rex64_sse"
7819 [(set (match_operand:V2DI 0 "register_operand" "=Y2 ,Yi,!Y2,Y2,x,x")7820 [(set (match_operand:V2DI 0 "register_operand" "=Y2 ,Yi,!Y2,Y2,x,x")
7820 (vec_concat:V2DI7821 (vec_concat:V2DI
@@ -7823,7 +7824,7 @@
7823 "TARGET_64BIT && TARGET_SSE"7824 "TARGET_64BIT && TARGET_SSE"
7824 "@7825 "@
7825 movq\t{%1, %0|%0, %1}7826 movq\t{%1, %0|%0, %1}
7826 movq\t{%1, %0|%0, %1}7827 movd\t{%1, %0|%0, %1}
7827 movq2dq\t{%1, %0|%0, %1}7828 movq2dq\t{%1, %0|%0, %1}
7828 punpcklqdq\t{%2, %0|%0, %2}7829 punpcklqdq\t{%2, %0|%0, %2}
7829 movlhps\t{%2, %0|%0, %2}7830 movlhps\t{%2, %0|%0, %2}
78307831
=== modified file 'gcc/config/pa/pa-protos.h'
--- gcc/config/pa/pa-protos.h 2009-09-23 18:08:32 +0000
+++ gcc/config/pa/pa-protos.h 2011-05-05 15:18:28 +0000
@@ -79,7 +79,6 @@
79extern int prefetch_cc_operand (rtx, enum machine_mode);79extern int prefetch_cc_operand (rtx, enum machine_mode);
80extern int prefetch_nocc_operand (rtx, enum machine_mode);80extern int prefetch_nocc_operand (rtx, enum machine_mode);
81extern int and_operand (rtx, enum machine_mode);81extern int and_operand (rtx, enum machine_mode);
82extern int ior_operand (rtx, enum machine_mode);
83extern int arith32_operand (rtx, enum machine_mode);82extern int arith32_operand (rtx, enum machine_mode);
84extern int uint32_operand (rtx, enum machine_mode);83extern int uint32_operand (rtx, enum machine_mode);
85extern int reg_before_reload_operand (rtx, enum machine_mode);84extern int reg_before_reload_operand (rtx, enum machine_mode);
@@ -94,7 +93,6 @@
94extern int fmpyaddoperands (rtx *);93extern int fmpyaddoperands (rtx *);
95extern int fmpysuboperands (rtx *);94extern int fmpysuboperands (rtx *);
96extern int call_operand_address (rtx, enum machine_mode);95extern int call_operand_address (rtx, enum machine_mode);
97extern int ior_operand (rtx, enum machine_mode);
98extern void emit_bcond_fp (rtx[]);96extern void emit_bcond_fp (rtx[]);
99extern int emit_move_sequence (rtx *, enum machine_mode, rtx);97extern int emit_move_sequence (rtx *, enum machine_mode, rtx);
100extern int emit_hpdiv_const (rtx *, int);98extern int emit_hpdiv_const (rtx *, int);
10199
=== modified file 'gcc/config/pa/pa.md'
--- gcc/config/pa/pa.md 2010-12-30 21:57:32 +0000
+++ gcc/config/pa/pa.md 2011-05-05 15:18:28 +0000
@@ -5686,7 +5686,7 @@
5686(define_expand "iordi3"5686(define_expand "iordi3"
5687 [(set (match_operand:DI 0 "register_operand" "")5687 [(set (match_operand:DI 0 "register_operand" "")
5688 (ior:DI (match_operand:DI 1 "register_operand" "")5688 (ior:DI (match_operand:DI 1 "register_operand" "")
5689 (match_operand:DI 2 "ior_operand" "")))]5689 (match_operand:DI 2 "reg_or_cint_ior_operand" "")))]
5690 ""5690 ""
5691 "5691 "
5692{5692{
@@ -5707,7 +5707,7 @@
5707(define_insn ""5707(define_insn ""
5708 [(set (match_operand:DI 0 "register_operand" "=r,r")5708 [(set (match_operand:DI 0 "register_operand" "=r,r")
5709 (ior:DI (match_operand:DI 1 "register_operand" "0,0")5709 (ior:DI (match_operand:DI 1 "register_operand" "0,0")
5710 (match_operand:DI 2 "ior_operand" "M,i")))]5710 (match_operand:DI 2 "cint_ior_operand" "M,i")))]
5711 "TARGET_64BIT"5711 "TARGET_64BIT"
5712 "* return output_64bit_ior (operands); "5712 "* return output_64bit_ior (operands); "
5713 [(set_attr "type" "binary,shift")5713 [(set_attr "type" "binary,shift")
@@ -5726,19 +5726,14 @@
5726(define_expand "iorsi3"5726(define_expand "iorsi3"
5727 [(set (match_operand:SI 0 "register_operand" "")5727 [(set (match_operand:SI 0 "register_operand" "")
5728 (ior:SI (match_operand:SI 1 "register_operand" "")5728 (ior:SI (match_operand:SI 1 "register_operand" "")
5729 (match_operand:SI 2 "arith32_operand" "")))]5729 (match_operand:SI 2 "reg_or_cint_ior_operand" "")))]
5730 ""5730 ""
5731 "5731 "")
5732{
5733 if (! (ior_operand (operands[2], SImode)
5734 || register_operand (operands[2], SImode)))
5735 operands[2] = force_reg (SImode, operands[2]);
5736}")
57375732
5738(define_insn ""5733(define_insn ""
5739 [(set (match_operand:SI 0 "register_operand" "=r,r")5734 [(set (match_operand:SI 0 "register_operand" "=r,r")
5740 (ior:SI (match_operand:SI 1 "register_operand" "0,0")5735 (ior:SI (match_operand:SI 1 "register_operand" "0,0")
5741 (match_operand:SI 2 "ior_operand" "M,i")))]5736 (match_operand:SI 2 "cint_ior_operand" "M,i")))]
5742 ""5737 ""
5743 "* return output_ior (operands); "5738 "* return output_ior (operands); "
5744 [(set_attr "type" "binary,shift")5739 [(set_attr "type" "binary,shift")
57455740
=== modified file 'gcc/config/pa/predicates.md'
--- gcc/config/pa/predicates.md 2010-07-03 21:46:51 +0000
+++ gcc/config/pa/predicates.md 2011-05-05 15:18:28 +0000
@@ -411,11 +411,15 @@
411411
412;; True iff depi can be used to compute (reg | OP).412;; True iff depi can be used to compute (reg | OP).
413413
414(define_predicate "ior_operand"414(define_predicate "cint_ior_operand"
415 (match_code "const_int")415 (and (match_code "const_int")
416{416 (match_test "ior_mask_p (INTVAL (op))")))
417 return (GET_CODE (op) == CONST_INT && ior_mask_p (INTVAL (op)));417
418})418;; True iff OP can be used to compute (reg | OP).
419
420(define_predicate "reg_or_cint_ior_operand"
421 (ior (match_operand 0 "register_operand")
422 (match_operand 0 "cint_ior_operand")))
419423
420;; True iff OP is a CONST_INT of the forms 0...0xxxx or424;; True iff OP is a CONST_INT of the forms 0...0xxxx or
421;; 0...01...1xxxx. Such values can be the left hand side x in (x <<425;; 0...01...1xxxx. Such values can be the left hand side x in (x <<
422426
=== modified file 'gcc/cp/ChangeLog'
--- gcc/cp/ChangeLog 2011-04-28 14:12:32 +0000
+++ gcc/cp/ChangeLog 2011-05-05 15:18:28 +0000
@@ -1,3 +1,9 @@
12011-04-27 Jason Merrill <jason@redhat.com>
2
3 PR c++/48046
4 * parser.c (cp_parser_diagnose_invalid_type_name): Commit
5 to tentative parse sooner.
6
12011-04-28 Release Manager72011-04-28 Release Manager
28
3 * GCC 4.5.3 released.9 * GCC 4.5.3 released.
410
=== modified file 'gcc/cp/parser.c'
--- gcc/cp/parser.c 2011-04-27 05:20:46 +0000
+++ gcc/cp/parser.c 2011-05-05 15:18:28 +0000
@@ -2333,6 +2333,7 @@
2333 location_t location)2333 location_t location)
2334{2334{
2335 tree decl, old_scope;2335 tree decl, old_scope;
2336 cp_parser_commit_to_tentative_parse (parser);
2336 /* Try to lookup the identifier. */2337 /* Try to lookup the identifier. */
2337 old_scope = parser->scope;2338 old_scope = parser->scope;
2338 parser->scope = scope;2339 parser->scope = scope;
@@ -2423,7 +2424,6 @@
2423 else2424 else
2424 gcc_unreachable ();2425 gcc_unreachable ();
2425 }2426 }
2426 cp_parser_commit_to_tentative_parse (parser);
2427}2427}
24282428
2429/* Check for a common situation where a type-name should be present,2429/* Check for a common situation where a type-name should be present,
24302430
=== modified file 'gcc/df-problems.c'
--- gcc/df-problems.c 2011-02-08 12:07:29 +0000
+++ gcc/df-problems.c 2011-05-05 15:18:28 +0000
@@ -3916,13 +3916,9 @@
3916 the block, starting with the first one.3916 the block, starting with the first one.
3917 ----------------------------------------------------------------------------*/3917 ----------------------------------------------------------------------------*/
39183918
3919/* Apply the artificial uses and defs at the top of BB in a forwards3919/* Initialize the LIVE bitmap, which should be copied from DF_LIVE_IN or
3920 direction. ??? This is wrong; defs mark the point where a pseudo3920 DF_LR_IN for basic block BB, for forward scanning by marking artificial
3921 becomes live when scanning forwards (unless a def is unused). Since3921 defs live. */
3922 there are no REG_UNUSED notes for artificial defs, passes that
3923 require artificial defs probably should not call this function
3924 unless (as is the case for fwprop) they are correct when liveness
3925 bitmaps are *under*estimated. */
39263922
3927void3923void
3928df_simulate_initialize_forwards (basic_block bb, bitmap live)3924df_simulate_initialize_forwards (basic_block bb, bitmap live)
39293925
=== modified file 'gcc/final.c'
--- gcc/final.c 2011-02-08 10:51:58 +0000
+++ gcc/final.c 2011-05-05 15:18:28 +0000
@@ -2241,6 +2241,11 @@
2241 location_t loc;2241 location_t loc;
2242 expanded_location expanded;2242 expanded_location expanded;
22432243
2244 /* Make sure we flush any queued register saves in case this
2245 clobbers affected registers. */
2246 if (dwarf2out_do_frame ())
2247 dwarf2out_frame_debug (insn, false);
2248
2244 /* There's no telling what that did to the condition codes. */2249 /* There's no telling what that did to the condition codes. */
2245 CC_STATUS_INIT;2250 CC_STATUS_INIT;
22462251
22472252
=== modified file 'gcc/fold-const.c'
--- gcc/fold-const.c 2011-04-28 16:13:24 +0000
+++ gcc/fold-const.c 2011-05-05 15:18:28 +0000
@@ -2784,8 +2784,6 @@
27842784
2785 case VOID_TYPE:2785 case VOID_TYPE:
2786 tem = fold_ignored_result (arg);2786 tem = fold_ignored_result (arg);
2787 if (TREE_CODE (tem) == MODIFY_EXPR)
2788 goto fold_convert_exit;
2789 return fold_build1_loc (loc, NOP_EXPR, type, tem);2787 return fold_build1_loc (loc, NOP_EXPR, type, tem);
27902788
2791 default:2789 default:
27922790
=== modified file 'gcc/ifcvt.c'
--- gcc/ifcvt.c 2011-02-08 12:07:29 +0000
+++ gcc/ifcvt.c 2011-05-05 15:18:28 +0000
@@ -4010,8 +4010,7 @@
4010{4010{
4011 basic_block new_dest = dest_edge->dest;4011 basic_block new_dest = dest_edge->dest;
4012 rtx head, end, jump, earliest = NULL_RTX, old_dest;4012 rtx head, end, jump, earliest = NULL_RTX, old_dest;
4013 bitmap merge_set = NULL;4013 bitmap merge_set = NULL, merge_set_noclobber = NULL;
4014 bitmap merge_set_noclobber = NULL;
4015 /* Number of pending changes. */4014 /* Number of pending changes. */
4016 int n_validated_changes = 0;4015 int n_validated_changes = 0;
4017 rtx new_dest_label;4016 rtx new_dest_label;
@@ -4165,9 +4164,11 @@
41654164
4166 /* Collect:4165 /* Collect:
4167 MERGE_SET = set of registers set in MERGE_BB4166 MERGE_SET = set of registers set in MERGE_BB
4167 MERGE_SET_NOCLOBBER = like MERGE_SET, but only includes registers
4168 that are really set, not just clobbered.
4168 TEST_LIVE = set of registers live at EARLIEST4169 TEST_LIVE = set of registers live at EARLIEST
4169 TEST_SET = set of registers set between EARLIEST and the4170 TEST_SET = set of registers set between EARLIEST and the
4170 end of the block. */4171 end of the block. */
41714172
4172 merge_set = BITMAP_ALLOC (&reg_obstack);4173 merge_set = BITMAP_ALLOC (&reg_obstack);
4173 merge_set_noclobber = BITMAP_ALLOC (&reg_obstack);4174 merge_set_noclobber = BITMAP_ALLOC (&reg_obstack);
@@ -4182,14 +4183,8 @@
4182 {4183 {
4183 if (NONDEBUG_INSN_P (insn))4184 if (NONDEBUG_INSN_P (insn))
4184 {4185 {
4185 unsigned int uid = INSN_UID (insn);4186 df_simulate_find_defs (insn, merge_set);
4186 df_ref *def_rec;4187 df_simulate_find_noclobber_defs (insn, merge_set_noclobber);
4187 for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
4188 {
4189 df_ref def = *def_rec;
4190 bitmap_set_bit (merge_set, DF_REF_REGNO (def));
4191 }
4192 df_simulate_find_noclobber_defs (insn, merge_set_noclobber);
4193 }4188 }
4194 }4189 }
41954190
@@ -4231,7 +4226,9 @@
4231 }4226 }
42324227
4233 /* We can perform the transformation if4228 /* We can perform the transformation if
4234 MERGE_SET & (TEST_SET | TEST_LIVE)4229 MERGE_SET_NOCLOBBER & TEST_SET
4230 and
4231 MERGE_SET & TEST_LIVE
4235 and4232 and
4236 TEST_SET & DF_LIVE_IN (merge_bb)4233 TEST_SET & DF_LIVE_IN (merge_bb)
4237 are empty. */4234 are empty. */
@@ -4319,11 +4316,11 @@
4319 unsigned i;4316 unsigned i;
4320 bitmap_iterator bi;4317 bitmap_iterator bi;
43214318
4322 EXECUTE_IF_SET_IN_BITMAP (merge_set, 0, i, bi)4319 EXECUTE_IF_SET_IN_BITMAP (merge_set_noclobber, 0, i, bi)
4323 remove_reg_equal_equiv_notes_for_regno (i);4320 remove_reg_equal_equiv_notes_for_regno (i);
43244321
4325 BITMAP_FREE (merge_set);4322 BITMAP_FREE (merge_set);
4326 BITMAP_FREE (merge_set_noclobber);4323 BITMAP_FREE (merge_set_noclobber);
4327 }4324 }
43284325
4329 reorder_insns (head, end, PREV_INSN (earliest));4326 reorder_insns (head, end, PREV_INSN (earliest));
43304327
=== modified file 'gcc/testsuite/ChangeLog'
--- gcc/testsuite/ChangeLog 2011-04-28 14:11:59 +0000
+++ gcc/testsuite/ChangeLog 2011-05-05 15:18:28 +0000
@@ -1,3 +1,53 @@
12010-05-05 Ira Rosen <ira.rosen@linaro.org>
2
3 Backport from mainline:
4 2011-04-18 Ulrich Weigand <ulrich.weigand@linaro.org>
5 Ira Rosen <ira.rosen@linaro.org>
6
7 PR target/48252
8 * gcc.target/arm/pr48252.c: New test.
9
102011-05-04 Uros Bizjak <ubizjak@gmail.com>
11
12 Backport from mainline
13 2011-04-21 Uros Bizjak <ubizjak@gmail.com>
14
15 PR target/48708
16 * gcc.target/i386/pr48708.c: New test.
17
182011-05-04 Uros Bizjak <ubizjak@gmail.com>
19
20 Backport from mainline
21 2010-12-08 H.J. Lu <hongjiu.lu@intel.com>
22
23 * gcc.target/i386/sse2-init-v2di-2.c: Add "-dp" and update
24 expected scan.
25
262011-05-03 Jakub Jelinek <jakub@redhat.com>
27
28 PR target/48774
29 * gcc.dg/pr48774.c: New test.
30
31 Backport from mainline
32 2011-04-30 Jakub Jelinek <jakub@redhat.com>
33
34 PR tree-optimization/48809
35 * gcc.c-torture/execute/pr48809.c: New test.
36
37 2011-04-27 Jakub Jelinek <jakub@redhat.com>
38
39 PR c/48742
40 * gcc.c-torture/compile/pr48742.c: New test.
41
42 2011-04-23 Jakub Jelinek <jakub@redhat.com>
43
44 PR c/48685
45 * gcc.dg/pr48685.c: New test.
46
472011-04-27 Jason Merrill <jason@redhat.com>
48
49 * g++.dg/parse/ambig6.C: New.
50
12011-04-28 Release Manager512011-04-28 Release Manager
252
3 * GCC 4.5.3 released.53 * GCC 4.5.3 released.
454
=== added file 'gcc/testsuite/g++.dg/parse/ambig6.C'
--- gcc/testsuite/g++.dg/parse/ambig6.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/parse/ambig6.C 2011-05-05 15:18:28 +0000
@@ -0,0 +1,12 @@
1// PR c++/48046
2
3namespace N1 { typedef int T; } // { dg-error "" }
4namespace N2 { typedef float T; } // { dg-error "" }
5
6int main()
7{
8 using namespace N1;
9 using namespace N2;
10
11 static T t; // { dg-error "" }
12}
013
=== added file 'gcc/testsuite/gcc.c-torture/compile/pr48742.c'
--- gcc/testsuite/gcc.c-torture/compile/pr48742.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.c-torture/compile/pr48742.c 2011-05-05 15:18:28 +0000
@@ -0,0 +1,15 @@
1/* PR c/48742 */
2
3void baz (int);
4
5int
6foo (void)
7{
8 return 1 / 0 > 0;
9}
10
11void
12bar (void)
13{
14 baz (1 <= 2 % (3 >> 1 > 5 / 6 == 3));
15}
016
=== added file 'gcc/testsuite/gcc.c-torture/execute/pr48809.c'
--- gcc/testsuite/gcc.c-torture/execute/pr48809.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.c-torture/execute/pr48809.c 2011-05-05 15:18:28 +0000
@@ -0,0 +1,60 @@
1/* PR tree-optimization/48809 */
2
3extern void abort (void);
4
5int
6foo (signed char x)
7{
8 int y = 0;
9 switch (x)
10 {
11 case 0: y = 1; break;
12 case 1: y = 7; break;
13 case 2: y = 2; break;
14 case 3: y = 19; break;
15 case 4: y = 5; break;
16 case 5: y = 17; break;
17 case 6: y = 31; break;
18 case 7: y = 8; break;
19 case 8: y = 28; break;
20 case 9: y = 16; break;
21 case 10: y = 31; break;
22 case 11: y = 12; break;
23 case 12: y = 15; break;
24 case 13: y = 111; break;
25 case 14: y = 17; break;
26 case 15: y = 10; break;
27 case 16: y = 31; break;
28 case 17: y = 7; break;
29 case 18: y = 2; break;
30 case 19: y = 19; break;
31 case 20: y = 5; break;
32 case 21: y = 107; break;
33 case 22: y = 31; break;
34 case 23: y = 8; break;
35 case 24: y = 28; break;
36 case 25: y = 106; break;
37 case 26: y = 31; break;
38 case 27: y = 102; break;
39 case 28: y = 105; break;
40 case 29: y = 111; break;
41 case 30: y = 17; break;
42 case 31: y = 10; break;
43 case 32: y = 31; break;
44 case 98: y = 18; break;
45 case -62: y = 19; break;
46 }
47 return y;
48}
49
50int
51main ()
52{
53 if (foo (98) != 18 || foo (97) != 0 || foo (99) != 0)
54 abort ();
55 if (foo (-62) != 19 || foo (-63) != 0 || foo (-61) != 0)
56 abort ();
57 if (foo (28) != 105 || foo (27) != 102 || foo (29) != 111)
58 abort ();
59 return 0;
60}
061
=== added file 'gcc/testsuite/gcc.dg/pr48685.c'
--- gcc/testsuite/gcc.dg/pr48685.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/pr48685.c 2011-05-05 15:18:28 +0000
@@ -0,0 +1,11 @@
1/* PR c/48685 */
2/* { dg-do compile } */
3/* { dg-options "-O2" } */
4
5int
6main ()
7{
8 int v = 1;
9 (void) (1 == 2 ? (void) 0 : (v = 0));
10 return v;
11}
012
=== added file 'gcc/testsuite/gcc.dg/pr48774.c'
--- gcc/testsuite/gcc.dg/pr48774.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/pr48774.c 2011-05-05 15:18:28 +0000
@@ -0,0 +1,38 @@
1/* PR target/48774 */
2/* { dg-do run } */
3/* { dg-options "-O2 -funroll-loops" } */
4
5extern void abort (void);
6unsigned long int s[24]
7 = { 12, ~1, 12, ~2, 12, ~4, 12, ~8, 12, ~16, 12, ~32,
8 12, ~64, 12, ~128, 12, ~256, 12, ~512, 12, ~1024, 12, ~2048 };
9struct { int n; unsigned long *e[12]; } g
10 = { 12, { &s[0], &s[2], &s[4], &s[6], &s[8], &s[10], &s[12], &s[14],
11 &s[16], &s[18], &s[20], &s[22] } };
12int c[12];
13
14__attribute__((noinline, noclone)) void
15foo (void)
16{
17 int i, j;
18 for (i = 0; i < g.n; i++)
19 for (j = 0; j < g.n; j++)
20 {
21 if (i == j && j < g.e[0][0] && (g.e[i][1] & (1UL << j)))
22 abort ();
23 if (j < g.e[0][0] && (g.e[i][1] & (1UL << j)))
24 c[i]++;
25 }
26}
27
28int
29main ()
30{
31 int i;
32 asm volatile ("" : "+m" (s), "+m" (g), "+m" (c));
33 foo ();
34 for (i = 0; i < 12; i++)
35 if (c[i] != 11)
36 abort ();
37 return 0;
38}
039
=== added file 'gcc/testsuite/gcc.target/arm/pr48252.c'
--- gcc/testsuite/gcc.target/arm/pr48252.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.target/arm/pr48252.c 2011-05-05 15:18:28 +0000
@@ -0,0 +1,31 @@
1/* { dg-do run } */
2/* { dg-require-effective-target arm_neon_hw } */
3/* { dg-options "-O2" } */
4/* { dg-add-options arm_neon } */
5
6#include "arm_neon.h"
7#include <stdlib.h>
8
9int main(void)
10{
11 uint8x8_t v1 = {1, 1, 1, 1, 1, 1, 1, 1};
12 uint8x8_t v2 = {2, 2, 2, 2, 2, 2, 2, 2};
13 uint8x8x2_t vd1, vd2;
14 union {uint8x8_t v; uint8_t buf[8];} d1, d2, d3, d4;
15 int i;
16
17 vd1 = vzip_u8(v1, vdup_n_u8(0));
18 vd2 = vzip_u8(v2, vdup_n_u8(0));
19
20 vst1_u8(d1.buf, vd1.val[0]);
21 vst1_u8(d2.buf, vd1.val[1]);
22 vst1_u8(d3.buf, vd2.val[0]);
23 vst1_u8(d4.buf, vd2.val[1]);
24
25 for (i = 0; i < 8; i++)
26 if ((i % 2 == 0 && d4.buf[i] != 2)
27 || (i % 2 == 1 && d4.buf[i] != 0))
28 abort ();
29
30 return 0;
31}
032
=== added file 'gcc/testsuite/gcc.target/i386/pr48708.c'
--- gcc/testsuite/gcc.target/i386/pr48708.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.target/i386/pr48708.c 2011-05-05 15:18:28 +0000
@@ -0,0 +1,15 @@
1/* { dg-do compile } */
2/* { dg-options "-O2 -msse2" } */
3
4#include <emmintrin.h>
5
6typedef long long T __attribute__((may_alias));
7struct S { __m128i d; };
8
9__m128i
10foo (long long *x, struct S *y, __m128i *z)
11{
12 struct S s = *y;
13 ((T *) &s.d)[0] = *x;
14 return _mm_cmpeq_epi16 (s.d, *z);
15}
016
=== modified file 'gcc/testsuite/gcc.target/i386/sse2-init-v2di-2.c'
--- gcc/testsuite/gcc.target/i386/sse2-init-v2di-2.c 2008-08-20 12:22:30 +0000
+++ gcc/testsuite/gcc.target/i386/sse2-init-v2di-2.c 2011-05-05 15:18:28 +0000
@@ -1,6 +1,6 @@
1/* { dg-do compile } */1/* { dg-do compile } */
2/* { dg-require-effective-target lp64 } */2/* { dg-require-effective-target lp64 } */
3/* { dg-options "-O2 -msse4 -march=core2" } */3/* { dg-options "-O2 -msse4 -march=core2 -dp" } */
44
5#include <emmintrin.h>5#include <emmintrin.h>
66
@@ -10,4 +10,4 @@
10 return _mm_cvtsi64_si128 (b); 10 return _mm_cvtsi64_si128 (b);
11}11}
1212
13/* { dg-final { scan-assembler "movq" } } */13/* { dg-final { scan-assembler-times "\\*vec_concatv2di_rex64_sse4_1/3" 1 } } */
1414
=== modified file 'gcc/tree-switch-conversion.c'
--- gcc/tree-switch-conversion.c 2010-09-02 13:05:30 +0000
+++ gcc/tree-switch-conversion.c 2011-05-05 15:18:28 +0000
@@ -549,7 +549,7 @@
549build_arrays (gimple swtch)549build_arrays (gimple swtch)
550{550{
551 tree arr_index_type;551 tree arr_index_type;
552 tree tidx, sub, tmp;552 tree tidx, sub, tmp, utype;
553 gimple stmt;553 gimple stmt;
554 gimple_stmt_iterator gsi;554 gimple_stmt_iterator gsi;
555 int i;555 int i;
@@ -557,14 +557,20 @@
557557
558 gsi = gsi_for_stmt (swtch);558 gsi = gsi_for_stmt (swtch);
559559
560 /* Make sure we do not generate arithmetics in a subrange. */
561 utype = TREE_TYPE (info.index_expr);
562 if (TREE_TYPE (utype))
563 utype = lang_hooks.types.type_for_mode (TYPE_MODE (TREE_TYPE (utype)), 1);
564 else
565 utype = lang_hooks.types.type_for_mode (TYPE_MODE (utype), 1);
566
560 arr_index_type = build_index_type (info.range_size);567 arr_index_type = build_index_type (info.range_size);
561 tmp = create_tmp_var (TREE_TYPE (info.index_expr), "csti");568 tmp = create_tmp_var (utype, "csui");
562 add_referenced_var (tmp);569 add_referenced_var (tmp);
563 tidx = make_ssa_name (tmp, NULL);570 tidx = make_ssa_name (tmp, NULL);
564 sub = fold_build2_loc (loc, MINUS_EXPR,571 sub = fold_build2_loc (loc, MINUS_EXPR, utype,
565 TREE_TYPE (info.index_expr), info.index_expr,572 fold_convert_loc (loc, utype, info.index_expr),
566 fold_convert_loc (loc, TREE_TYPE (info.index_expr),573 fold_convert_loc (loc, utype, info.range_min));
567 info.range_min));
568 sub = force_gimple_operand_gsi (&gsi, sub,574 sub = force_gimple_operand_gsi (&gsi, sub,
569 false, NULL, true, GSI_SAME_STMT);575 false, NULL, true, GSI_SAME_STMT);
570 stmt = gimple_build_assign (tidx, sub);576 stmt = gimple_build_assign (tidx, sub);
@@ -673,12 +679,7 @@
673 tree label_decl2 = create_artificial_label (UNKNOWN_LOCATION);679 tree label_decl2 = create_artificial_label (UNKNOWN_LOCATION);
674 tree label_decl3 = create_artificial_label (UNKNOWN_LOCATION);680 tree label_decl3 = create_artificial_label (UNKNOWN_LOCATION);
675 gimple label1, label2, label3;681 gimple label1, label2, label3;
676682 tree utype, tidx;
677 tree utype;
678 tree tmp_u_1, tmp_u_2, tmp_u_var;
679 tree cast;
680 gimple cast_assign, minus_assign;
681 tree ulb, minus;
682 tree bound;683 tree bound;
683684
684 gimple cond_stmt;685 gimple cond_stmt;
@@ -692,49 +693,24 @@
692 gcc_assert (info.default_values);693 gcc_assert (info.default_values);
693 bb0 = gimple_bb (swtch);694 bb0 = gimple_bb (swtch);
694695
695 /* Make sure we do not generate arithmetics in a subrange. */696 tidx = gimple_assign_lhs (info.arr_ref_first);
696 if (TREE_TYPE (TREE_TYPE (info.index_expr)))697 utype = TREE_TYPE (tidx);
697 utype = lang_hooks.types.type_for_mode
698 (TYPE_MODE (TREE_TYPE (TREE_TYPE (info.index_expr))), 1);
699 else
700 utype = lang_hooks.types.type_for_mode
701 (TYPE_MODE (TREE_TYPE (info.index_expr)), 1);
702698
703 /* (end of) block 0 */699 /* (end of) block 0 */
704 gsi = gsi_for_stmt (info.arr_ref_first);700 gsi = gsi_for_stmt (info.arr_ref_first);
705 tmp_u_var = create_tmp_var (utype, "csui");701 gsi_next (&gsi);
706 add_referenced_var (tmp_u_var);
707 tmp_u_1 = make_ssa_name (tmp_u_var, NULL);
708
709 cast = fold_convert_loc (loc, utype, info.index_expr);
710 cast_assign = gimple_build_assign (tmp_u_1, cast);
711 SSA_NAME_DEF_STMT (tmp_u_1) = cast_assign;
712 gsi_insert_before (&gsi, cast_assign, GSI_SAME_STMT);
713 update_stmt (cast_assign);
714
715 ulb = fold_convert_loc (loc, utype, info.range_min);
716 minus = fold_build2_loc (loc, MINUS_EXPR, utype, tmp_u_1, ulb);
717 minus = force_gimple_operand_gsi (&gsi, minus, false, NULL, true,
718 GSI_SAME_STMT);
719 tmp_u_2 = make_ssa_name (tmp_u_var, NULL);
720 minus_assign = gimple_build_assign (tmp_u_2, minus);
721 SSA_NAME_DEF_STMT (tmp_u_2) = minus_assign;
722 gsi_insert_before (&gsi, minus_assign, GSI_SAME_STMT);
723 update_stmt (minus_assign);
724702
725 bound = fold_convert_loc (loc, utype, info.range_size);703 bound = fold_convert_loc (loc, utype, info.range_size);
726 cond_stmt = gimple_build_cond (LE_EXPR, tmp_u_2, bound, NULL_TREE, NULL_TREE);704 cond_stmt = gimple_build_cond (LE_EXPR, tidx, bound, NULL_TREE, NULL_TREE);
727 gsi_insert_before (&gsi, cond_stmt, GSI_SAME_STMT);705 gsi_insert_before (&gsi, cond_stmt, GSI_SAME_STMT);
728 update_stmt (cond_stmt);706 update_stmt (cond_stmt);
729707
730 /* block 2 */708 /* block 2 */
731 gsi = gsi_for_stmt (info.arr_ref_first);
732 label2 = gimple_build_label (label_decl2);709 label2 = gimple_build_label (label_decl2);
733 gsi_insert_before (&gsi, label2, GSI_SAME_STMT);710 gsi_insert_before (&gsi, label2, GSI_SAME_STMT);
734 last_assign = gen_def_assigns (&gsi);711 last_assign = gen_def_assigns (&gsi);
735712
736 /* block 1 */713 /* block 1 */
737 gsi = gsi_for_stmt (info.arr_ref_first);
738 label1 = gimple_build_label (label_decl1);714 label1 = gimple_build_label (label_decl1);
739 gsi_insert_before (&gsi, label1, GSI_SAME_STMT);715 gsi_insert_before (&gsi, label1, GSI_SAME_STMT);
740716
741717
=== modified file 'libffi/ChangeLog'
--- libffi/ChangeLog 2011-04-28 14:10:51 +0000
+++ libffi/ChangeLog 2011-05-05 15:18:28 +0000
@@ -1,3 +1,13 @@
12011-05-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
2
3 Backport from mainline:
4 2011-04-29 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
5
6 * src/alpha/osf.S (UA_SI, FDE_ENCODING, FDE_ENCODE, FDE_ARANGE):
7 Define.
8 Use them to handle ELF vs. ECOFF differences.
9 [__osf__] (_GLOBAL__F_ffi_call_osf): Define.
10
12011-04-28 Release Manager112011-04-28 Release Manager
212
3 * GCC 4.5.3 released.13 * GCC 4.5.3 released.
414
=== modified file 'libffi/src/alpha/osf.S'
--- libffi/src/alpha/osf.S 2009-06-04 14:43:03 +0000
+++ libffi/src/alpha/osf.S 2011-05-05 15:18:28 +0000
@@ -1,5 +1,5 @@
1/* -----------------------------------------------------------------------1/* -----------------------------------------------------------------------
2 osf.S - Copyright (c) 1998, 2001, 2007, 2008 Red Hat2 osf.S - Copyright (c) 1998, 2001, 2007, 2008, 2011 Red Hat
3 3
4 Alpha/OSF Foreign Function Interface 4 Alpha/OSF Foreign Function Interface
55
@@ -299,33 +299,51 @@
299#endif299#endif
300300
301#ifdef __ELF__301#ifdef __ELF__
302# define UA_SI .4byte
303# define FDE_ENCODING 0x1b /* pcrel sdata4 */
304# define FDE_ENCODE(X) .4byte X-.
305# define FDE_ARANGE(X) .4byte X
306#elif defined __osf__
307# define UA_SI .align 0; .long
308# define FDE_ENCODING 0x50 /* aligned absolute */
309# define FDE_ENCODE(X) .align 3; .quad X
310# define FDE_ARANGE(X) .align 0; .quad X
311#endif
312
313#ifdef __ELF__
302 .section .eh_frame,EH_FRAME_FLAGS,@progbits314 .section .eh_frame,EH_FRAME_FLAGS,@progbits
315#elif defined __osf__
316 .data
317 .align 3
318 .globl _GLOBAL__F_ffi_call_osf
319_GLOBAL__F_ffi_call_osf:
320#endif
303__FRAME_BEGIN__:321__FRAME_BEGIN__:
304 .4byte $LECIE1-$LSCIE1 # Length of Common Information Entry322 UA_SI $LECIE1-$LSCIE1 # Length of Common Information Entry
305$LSCIE1:323$LSCIE1:
306 .4byte 0x0 # CIE Identifier Tag324 UA_SI 0x0 # CIE Identifier Tag
307 .byte 0x1 # CIE Version325 .byte 0x1 # CIE Version
308 .ascii "zR\0" # CIE Augmentation326 .ascii "zR\0" # CIE Augmentation
309 .byte 0x1 # uleb128 0x1; CIE Code Alignment Factor327 .byte 0x1 # uleb128 0x1; CIE Code Alignment Factor
310 .byte 0x78 # sleb128 -8; CIE Data Alignment Factor328 .byte 0x78 # sleb128 -8; CIE Data Alignment Factor
311 .byte 26 # CIE RA Column329 .byte 26 # CIE RA Column
312 .byte 0x1 # uleb128 0x1; Augmentation size330 .byte 0x1 # uleb128 0x1; Augmentation size
313 .byte 0x1b # FDE Encoding (pcrel sdata4)331 .byte FDE_ENCODING # FDE Encoding
314 .byte 0xc # DW_CFA_def_cfa332 .byte 0xc # DW_CFA_def_cfa
315 .byte 30 # uleb128 column 30333 .byte 30 # uleb128 column 30
316 .byte 0 # uleb128 offset 0334 .byte 0 # uleb128 offset 0
317 .align 3335 .align 3
318$LECIE1:336$LECIE1:
319$LSFDE1:337$LSFDE1:
320 .4byte $LEFDE1-$LASFDE1 # FDE Length338 UA_SI $LEFDE1-$LASFDE1 # FDE Length
321$LASFDE1:339$LASFDE1:
322 .4byte $LASFDE1-__FRAME_BEGIN__ # FDE CIE offset340 UA_SI $LASFDE1-__FRAME_BEGIN__ # FDE CIE offset
323 .4byte $LFB1-. # FDE initial location341 FDE_ENCODE($LFB1) # FDE initial location
324 .4byte $LFE1-$LFB1 # FDE address range342 FDE_ARANGE($LFE1-$LFB1) # FDE address range
325 .byte 0x0 # uleb128 0x0; Augmentation size343 .byte 0x0 # uleb128 0x0; Augmentation size
326344
327 .byte 0x4 # DW_CFA_advance_loc4345 .byte 0x4 # DW_CFA_advance_loc4
328 .4byte $LCFI1-$LFB1346 UA_SI $LCFI1-$LFB1
329 .byte 0x9a # DW_CFA_offset, column 26347 .byte 0x9a # DW_CFA_offset, column 26
330 .byte 4 # uleb128 4*-8348 .byte 4 # uleb128 4*-8
331 .byte 0x8f # DW_CFA_offset, column 15349 .byte 0x8f # DW_CFA_offset, column 15
@@ -335,32 +353,35 @@
335 .byte 32 # uleb128 offset 32353 .byte 32 # uleb128 offset 32
336354
337 .byte 0x4 # DW_CFA_advance_loc4355 .byte 0x4 # DW_CFA_advance_loc4
338 .4byte $LCFI2-$LCFI1356 UA_SI $LCFI2-$LCFI1
339 .byte 0xda # DW_CFA_restore, column 26357 .byte 0xda # DW_CFA_restore, column 26
340 .align 3358 .align 3
341$LEFDE1:359$LEFDE1:
342360
343$LSFDE3:361$LSFDE3:
344 .4byte $LEFDE3-$LASFDE3 # FDE Length362 UA_SI $LEFDE3-$LASFDE3 # FDE Length
345$LASFDE3:363$LASFDE3:
346 .4byte $LASFDE3-__FRAME_BEGIN__ # FDE CIE offset364 UA_SI $LASFDE3-__FRAME_BEGIN__ # FDE CIE offset
347 .4byte $LFB2-. # FDE initial location365 FDE_ENCODE($LFB2) # FDE initial location
348 .4byte $LFE2-$LFB2 # FDE address range366 FDE_ARANGE($LFE2-$LFB2) # FDE address range
349 .byte 0x0 # uleb128 0x0; Augmentation size367 .byte 0x0 # uleb128 0x0; Augmentation size
350368
351 .byte 0x4 # DW_CFA_advance_loc4369 .byte 0x4 # DW_CFA_advance_loc4
352 .4byte $LCFI5-$LFB2370 UA_SI $LCFI5-$LFB2
353 .byte 0xe # DW_CFA_def_cfa_offset371 .byte 0xe # DW_CFA_def_cfa_offset
354 .byte 0x80,0x1 # uleb128 128372 .byte 0x80,0x1 # uleb128 128
355373
356 .byte 0x4 # DW_CFA_advance_loc4374 .byte 0x4 # DW_CFA_advance_loc4
357 .4byte $LCFI6-$LCFI5375 UA_SI $LCFI6-$LCFI5
358 .byte 0x9a # DW_CFA_offset, column 26376 .byte 0x9a # DW_CFA_offset, column 26
359 .byte 16 # uleb128 offset 16*-8377 .byte 16 # uleb128 offset 16*-8
360 .align 3378 .align 3
361$LEFDE3:379$LEFDE3:
380#if defined __osf__
381 .align 0
382 .long 0 # End of Table
383#endif
362384
363#ifdef __linux__385#if defined __ELF__ && defined __linux__
364 .section .note.GNU-stack,"",@progbits386 .section .note.GNU-stack,"",@progbits
365#endif387#endif
366#endif

Subscribers

People subscribed via source and target branches