summaryrefslogtreecommitdiff
path: root/m68k-unknown-amigaos/recipes/patches/gcc/gcc.config.m68k.m68k.md.p
blob: c63b8d534b2d301a4addb0fed0a1720cf218b3dc (plain)
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
--- m68k.md.orig	2005-07-26 21:32:25.000000000 +0100
+++ gcc/config/m68k/m68k.md	2015-01-01 14:46:17.666994805 +0000
@@ -3679,7 +3679,7 @@
       target = operand_subword_force (operands[0], 0, SFmode);
       result = expand_binop (SImode, xor_optab,
 			     operand_subword_force (operands[1], 0, SFmode),
-			     GEN_INT (0x80000000), target, 0, OPTAB_WIDEN);
+			     GEN_INT (-2147483647 - 1), target, 0, OPTAB_WIDEN);
       if (result == 0)
 	abort ();
 
@@ -3723,7 +3723,7 @@
       target = operand_subword (operands[0], 0, 1, DFmode);
       result = expand_binop (SImode, xor_optab,
 			     operand_subword_force (operands[1], 0, DFmode),
-			     GEN_INT (0x80000000), target, 0, OPTAB_WIDEN);
+			     GEN_INT (-2147483647 - 1), target, 0, OPTAB_WIDEN);
       if (result == 0)
 	abort ();
 
@@ -6418,7 +6418,7 @@
 	 (match_operand:SI 1 "general_operand" "g"))]
   ;; Operand 1 not really used on the m68000.
 
-  "! flag_pic"
+  "(! flag_pic || flag_pic >= 3)"
 {
 #if MOTOROLA && !defined (USE_GAS)
   return "jsr %0";
@@ -6433,7 +6433,7 @@
 	 (match_operand:SI 1 "general_operand" "g"))]
   ;; Operand 1 not really used on the m68000.
 
-  "flag_pic"
+  "(flag_pic && flag_pic < 3)"
 {
   m68k_output_pic_call(operands[0]);
   return "";
@@ -6460,7 +6460,7 @@
 	(call (match_operand:QI 1 "memory_operand" "o")
 	      (match_operand:SI 2 "general_operand" "g")))]
   ;; Operand 2 not really used on the m68000.
-  "! flag_pic"
+  "(! flag_pic || flag_pic >= 3)"
 {
 #if MOTOROLA && !defined (USE_GAS)
   return "jsr %1";
@@ -6475,7 +6475,7 @@
 	(call (match_operand:QI 1 "memory_operand" "o")
 	      (match_operand:SI 2 "general_operand" "g")))]
   ;; Operand 2 not really used on the m68000.
-  "flag_pic"
+  "(flag_pic && flag_pic < 3)"
 {
   m68k_output_pic_call(operands[1]);
   return "";
@@ -7170,7 +7170,7 @@
       target = operand_subword (operands[0], 0, 1, XFmode);
       result = expand_binop (SImode, xor_optab,
 			     operand_subword_force (operands[1], 0, XFmode),
-			     GEN_INT (0x80000000), target, 0, OPTAB_WIDEN);
+			     GEN_INT (-2147483647 - 1), target, 0, OPTAB_WIDEN);
       if (result == 0)
 	abort ();
 
@@ -7334,3 +7334,16 @@
   default: abort();
   }
 })
+
+; This is only needed for some subtargets.
+(define_expand "allocate_stack"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+	(minus:SI (reg:SI 15) (match_operand:SI 1 "general_operand" "")))
+   (set (reg:SI 15) (minus:SI (reg:SI 15) (match_dup 1)))]
+  "TARGET_ALTERNATE_ALLOCATE_STACK"
+  "
+{
+#ifdef ALTERNATE_ALLOCATE_STACK
+  ALTERNATE_ALLOCATE_STACK(operands);
+#endif
+}")