summaryrefslogtreecommitdiff
path: root/packages/gcc/gcc-4.2.2/arm-crunch-compare-unordered.patch
blob: c4fcdb37464361e96baa63a41a3176cfdc2d82c4 (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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
--- gcc-4.1.2/gcc/config/arm/arm.md-original	2007-06-07 14:45:22.000000000 +1000
+++ gcc-4.1.2/gcc/config/arm/arm.md	2007-06-07 15:13:58.000000000 +1000
@@ -7001,16 +7001,16 @@
 	(if_then_else (unordered (match_dup 1) (const_int 0))
 		      (label_ref (match_operand 0 "" ""))
 		      (pc)))]
-  "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)"
+  "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)"
   "operands[1] = arm_gen_compare_reg (UNORDERED, arm_compare_op0,
 				      arm_compare_op1);"
 )
 
 (define_expand "bordered"
   [(set (pc)
 	(if_then_else (ordered (match_dup 1) (const_int 0))
 		      (label_ref (match_operand 0 "" ""))
 		      (pc)))]
-  "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)"
+  "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)"
   "operands[1] = arm_gen_compare_reg (ORDERED, arm_compare_op0,
 				      arm_compare_op1);"
@@ -7141,6 +7141,38 @@
    (set_attr "length" "8")]
 )
 
+; Special pattern to match UNORDERED for MAVERICK - UGLY since we need to test for Z=0 && N=0.
+(define_insn "*arm_bunordered"
+  [(set (pc)
+	(if_then_else (unordered (match_operand:CCFP 1 "cc_register" "") (const_int 0))
+		      (label_ref (match_operand 0 "" ""))
+		      (pc)))]
+  "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_MAVERICK)"
+  "*
+  gcc_assert (!arm_ccfsm_state);
+
+  return \"beq\\t.+12\;bmi\\t.+8\;b\\t%l0\";
+  "
+  [(set_attr "conds" "jump_clob")
+   (set_attr "length" "12")]
+)
+
+; Special pattern to match ORDERED for MAVERICK.
+(define_insn "*arm_bordered"
+  [(set (pc)
+	(if_then_else (ordered (match_operand:CCFP 1 "cc_register" "") (const_int 0))
+		      (label_ref (match_operand 0 "" ""))
+		      (pc)))]
+  "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_MAVERICK)"
+  "*
+  gcc_assert (!arm_ccfsm_state);
+
+  return \"beq\\t%l0\;bmi\\t%l0\";
+  "
+  [(set_attr "conds" "jump_clob")
+   (set_attr "length" "8")]
+)
+
 (define_insn "*arm_cond_branch"
   [(set (pc)
 	(if_then_else (match_operator 1 "arm_comparison_operator"
@@ -7224,6 +7256,37 @@
    (set_attr "length" "8")]
 )
 
+; Special pattern to match reversed UNORDERED for MAVERICK.
+(define_insn "*arm_bunordered_reversed"
+  [(set (pc)
+	(if_then_else (unordered (match_operand:CCFP 1 "cc_register" "") (const_int 0))
+              (pc)
+		      (label_ref (match_operand 0 "" ""))))]
+  "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_MAVERICK)"
+  "*
+  gcc_assert (!arm_ccfsm_state);
+
+  return \"beq\\t%l0\;bmi\\t%l0\";
+  "
+  [(set_attr "conds" "jump_clob")
+   (set_attr "length" "8")]
+)
+
+; Special pattern to match reversed ORDERED for MAVERICK - UGLY since we need to test for Z=0 && N=0.
+(define_insn "*arm_bordered_reversed"
+  [(set (pc)
+	(if_then_else (ordered (match_operand:CCFP 1 "cc_register" "") (const_int 0))
+              (pc)
+		      (label_ref (match_operand 0 "" ""))))]
+  "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_MAVERICK)"
+  "*
+  gcc_assert (!arm_ccfsm_state);
+
+  return \"beq\\t.+12\;bmi\\t.+8\;b\\t%l0\";
+  "
+  [(set_attr "conds" "jump_clob")
+   (set_attr "length" "12")]
+)
 
 (define_insn "*arm_cond_branch_reversed"
   [(set (pc)