File: patch_fixed_reg

package info (click to toggle)
gcc-avr 1%3A5.4.0%2BAtmel3.6.2-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, sid
  • size: 589,872 kB
  • sloc: ansic: 2,775,581; ada: 756,757; cpp: 723,977; f90: 117,673; asm: 66,898; makefile: 62,755; xml: 44,466; sh: 29,549; exp: 23,315; objc: 15,216; fortran: 10,901; pascal: 4,185; python: 4,093; perl: 2,969; awk: 2,811; ml: 2,385; cs: 879; yacc: 316; lex: 198; haskell: 112; lisp: 8
file content (97 lines) | stat: -rw-r--r-- 3,500 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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
--- gcc/config/avr/avr.c.orig   Sat May 12 15:32:41 2001
+++ gcc/config/avr/avr.c        Sat Oct  6 01:04:15 2001
@@ -562,7 +562,7 @@
       fprintf (file,"\tsei\n");
       ++prologue_size;
     }
-  if (interrupt_func_p | signal_func_p)
+  if (interrupt_func_p || signal_func_p)
     {
       fprintf (file, "\t"
                AS1 (push,__zero_reg__)   CR_TAB
@@ -574,14 +574,23 @@
     }
   if (main_p)
     {
-      fprintf (file, ("\t" 
-                     AS2 (ldi,r28,lo8(%s - %d)) CR_TAB
-                     AS2 (ldi,r29,hi8(%s - %d)) CR_TAB
-                     AS2 (out,__SP_H__,r29)     CR_TAB
-                     AS2 (out,__SP_L__,r28) "\n"),
-              avr_init_stack, size, avr_init_stack, size);
+      if (!TARGET_TINY_STACK) {
+        fprintf (file, ("\t" 
+                       AS2 (ldi,r28,lo8(%s - %d)) CR_TAB
+                       AS2 (ldi,r29,hi8(%s - %d)) CR_TAB
+                       AS2 (out,__SP_H__,r29)     CR_TAB
+                       AS2 (out,__SP_L__,r28) "\n"),
+                avr_init_stack, size, avr_init_stack, size);
       
-      prologue_size += 4;
+        prologue_size += 4;
+      } else {
+        fprintf (file, ("\t" 
+                       AS2 (ldi,r28,lo8(%s - %d)) CR_TAB
+                       AS2 (out,__SP_L__,r28) "\n"),
+                avr_init_stack, size);
+      
+        prologue_size += 2;
+      }
     }
   else if (minimize && (frame_pointer_needed || live_seq > 6)) 
     {
@@ -613,7 +622,8 @@
     {
       for (reg = 0; reg < 32; ++reg)
        {
-         if ((!leaf_func_p
+         if (!fixed_regs[reg] &&
+             ((!leaf_func_p
               && (call_used_regs[reg]
                   && (interrupt_func_p || signal_func_p)
                   && !(reg == TMP_REGNO || reg == ZERO_REGNO)))
@@ -621,7 +631,7 @@
                  && (!call_used_regs[reg]
                      || interrupt_func_p || signal_func_p)
                  && ! (frame_pointer_needed
-                       && (reg == REG_Y || reg == (REG_Y+1)))))
+                       && (reg == REG_Y || reg == (REG_Y+1))))))
            {
              fprintf (file, "\t" AS1 (push,%s) "\n", avr_regnames[reg]);
              ++prologue_size;
@@ -737,7 +747,7 @@
              fputs ("\t", file);
              epilogue_size += out_adj_frame_ptr (file, -size);
 
-             if (interrupt_func_p | signal_func_p)
+             if (interrupt_func_p || signal_func_p)
                {
                  epilogue_size += out_set_stack_ptr (file, -1, 0);
                }
@@ -754,7 +764,8 @@
 
       for (reg = 31; reg >= 0; --reg)
        {
-         if ((!leaf_func_p
+         if (!fixed_regs[reg] &&
+             ((!leaf_func_p
               && (call_used_regs[reg]
                   && (interrupt_func_p || signal_func_p)
                   && !(reg == TMP_REGNO || reg == ZERO_REGNO)))
@@ -762,14 +773,14 @@
                  && (!call_used_regs[reg]
                      || interrupt_func_p || signal_func_p)
                  && ! (frame_pointer_needed
-                       && (reg == REG_Y || reg == (REG_Y+1)))))
+                       && (reg == REG_Y || reg == (REG_Y+1))))))
            {
              fprintf (file, "\t" AS1 (pop,%s) "\n", avr_regnames[reg]);
              ++epilogue_size;
            }
        }
       
-      if (interrupt_func_p | signal_func_p)
+      if (interrupt_func_p || signal_func_p)
        {
          fprintf (file, "\t"
                   AS1 (pop,__tmp_reg__)      CR_TAB