File: m68k-subreg.dpatch

package info (click to toggle)
gcc-3.3 1%3A3.3.6ds1-25
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 25,804 kB
  • sloc: sh: 10,273; makefile: 1,052; perl: 155; awk: 23; cpp: 14
file content (48 lines) | stat: -rw-r--r-- 1,401 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#! /bin/sh -e

# DP: 2003-04-07  Roman Zippel  <zippel@linux-m68k.org>
# DP: 
# DP:   * gcc/final.c (alter_subreg): Adjust stack offset for a paradoxical
# DP: 	SUBREG, when it's pushed on the stack.

dir=
if [ $# -eq 3 -a "$2" = '-d' ]; then
    pdir="-d $3"
    dir="$3/"
elif [ $# -ne 1 ]; then
    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
    exit 1
fi
case "$1" in
    -patch)
        patch $pdir -f --no-backup-if-mismatch -p0 < $0
        ;;
    -unpatch)
        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
        ;;
    *)
        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
        exit 1
esac
exit 0

diff -u -p -r1.241.2.4 final.c
--- gcc/final.c	24 May 2002 21:26:50 -0000	1.241.2.4
+++ gcc/final.c	3 Apr 2003 22:55:06 -0000
@@ -2738,7 +2738,15 @@ alter_subreg (xp)
   /* simplify_subreg does not remove subreg from volatile references.
      We are required to.  */
   if (GET_CODE (y) == MEM)
-    *xp = adjust_address (y, GET_MODE (x), SUBREG_BYTE (x));
+    {
+      register int offset = SUBREG_BYTE (x);
+
+      if (BYTES_BIG_ENDIAN)
+	if (GET_MODE_SIZE (GET_MODE (x)) > GET_MODE_SIZE (GET_MODE (y)))
+	  offset -= GET_MODE_SIZE (GET_MODE (x)) - GET_MODE_SIZE (GET_MODE (y));
+
+      *xp = adjust_address (y, GET_MODE (x), offset);
+    }
   else
     {
       rtx new = simplify_subreg (GET_MODE (x), y, GET_MODE (y),