diff options
author | David S. Miller <davem@davemloft.net> | 2012-06-27 04:25:23 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-06-27 04:25:23 -0400 |
commit | 6f1d827f299085a48cb3a987e1487e16f1a980c9 (patch) | |
tree | 4cebffe75d98ae2f2672308eb2c4ab6acabd8ee4 /arch | |
parent | d1346a6cbabf6d377d753f1adc16cb0b305830cc (diff) |
sparc64: Consistently use fsrc2 rather than fmovd in optimized asm.
Because fsrc2, unlike fmovd, does not update the %fsr register.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/sparc/lib/NG2memcpy.S | 72 | ||||
-rw-r--r-- | arch/sparc/lib/U1memcpy.S | 4 | ||||
-rw-r--r-- | arch/sparc/lib/copy_page.S | 56 |
3 files changed, 66 insertions, 66 deletions
diff --git a/arch/sparc/lib/NG2memcpy.S b/arch/sparc/lib/NG2memcpy.S index 0aed75653b50..03eadf66b0d3 100644 --- a/arch/sparc/lib/NG2memcpy.S +++ b/arch/sparc/lib/NG2memcpy.S | |||
@@ -90,49 +90,49 @@ | |||
90 | faligndata %x7, %x8, %f14; | 90 | faligndata %x7, %x8, %f14; |
91 | 91 | ||
92 | #define FREG_MOVE_1(x0) \ | 92 | #define FREG_MOVE_1(x0) \ |
93 | fmovd %x0, %f0; | 93 | fsrc2 %x0, %f0; |
94 | #define FREG_MOVE_2(x0, x1) \ | 94 | #define FREG_MOVE_2(x0, x1) \ |
95 | fmovd %x0, %f0; \ | 95 | fsrc2 %x0, %f0; \ |
96 | fmovd %x1, %f2; | 96 | fsrc2 %x1, %f2; |
97 | #define FREG_MOVE_3(x0, x1, x2) \ | 97 | #define FREG_MOVE_3(x0, x1, x2) \ |
98 | fmovd %x0, %f0; \ | 98 | fsrc2 %x0, %f0; \ |
99 | fmovd %x1, %f2; \ | 99 | fsrc2 %x1, %f2; \ |
100 | fmovd %x2, %f4; | 100 | fsrc2 %x2, %f4; |
101 | #define FREG_MOVE_4(x0, x1, x2, x3) \ | 101 | #define FREG_MOVE_4(x0, x1, x2, x3) \ |
102 | fmovd %x0, %f0; \ | 102 | fsrc2 %x0, %f0; \ |
103 | fmovd %x1, %f2; \ | 103 | fsrc2 %x1, %f2; \ |
104 | fmovd %x2, %f4; \ | 104 | fsrc2 %x2, %f4; \ |
105 | fmovd %x3, %f6; | 105 | fsrc2 %x3, %f6; |
106 | #define FREG_MOVE_5(x0, x1, x2, x3, x4) \ | 106 | #define FREG_MOVE_5(x0, x1, x2, x3, x4) \ |
107 | fmovd %x0, %f0; \ | 107 | fsrc2 %x0, %f0; \ |
108 | fmovd %x1, %f2; \ | 108 | fsrc2 %x1, %f2; \ |
109 | fmovd %x2, %f4; \ | 109 | fsrc2 %x2, %f4; \ |
110 | fmovd %x3, %f6; \ | 110 | fsrc2 %x3, %f6; \ |
111 | fmovd %x4, %f8; | 111 | fsrc2 %x4, %f8; |
112 | #define FREG_MOVE_6(x0, x1, x2, x3, x4, x5) \ | 112 | #define FREG_MOVE_6(x0, x1, x2, x3, x4, x5) \ |
113 | fmovd %x0, %f0; \ | 113 | fsrc2 %x0, %f0; \ |
114 | fmovd %x1, %f2; \ | 114 | fsrc2 %x1, %f2; \ |
115 | fmovd %x2, %f4; \ | 115 | fsrc2 %x2, %f4; \ |
116 | fmovd %x3, %f6; \ | 116 | fsrc2 %x3, %f6; \ |
117 | fmovd %x4, %f8; \ | 117 | fsrc2 %x4, %f8; \ |
118 | fmovd %x5, %f10; | 118 | fsrc2 %x5, %f10; |
119 | #define FREG_MOVE_7(x0, x1, x2, x3, x4, x5, x6) \ | 119 | #define FREG_MOVE_7(x0, x1, x2, x3, x4, x5, x6) \ |
120 | fmovd %x0, %f0; \ | 120 | fsrc2 %x0, %f0; \ |
121 | fmovd %x1, %f2; \ | 121 | fsrc2 %x1, %f2; \ |
122 | fmovd %x2, %f4; \ | 122 | fsrc2 %x2, %f4; \ |
123 | fmovd %x3, %f6; \ | 123 | fsrc2 %x3, %f6; \ |
124 | fmovd %x4, %f8; \ | 124 | fsrc2 %x4, %f8; \ |
125 | fmovd %x5, %f10; \ | 125 | fsrc2 %x5, %f10; \ |
126 | fmovd %x6, %f12; | 126 | fsrc2 %x6, %f12; |
127 | #define FREG_MOVE_8(x0, x1, x2, x3, x4, x5, x6, x7) \ | 127 | #define FREG_MOVE_8(x0, x1, x2, x3, x4, x5, x6, x7) \ |
128 | fmovd %x0, %f0; \ | 128 | fsrc2 %x0, %f0; \ |
129 | fmovd %x1, %f2; \ | 129 | fsrc2 %x1, %f2; \ |
130 | fmovd %x2, %f4; \ | 130 | fsrc2 %x2, %f4; \ |
131 | fmovd %x3, %f6; \ | 131 | fsrc2 %x3, %f6; \ |
132 | fmovd %x4, %f8; \ | 132 | fsrc2 %x4, %f8; \ |
133 | fmovd %x5, %f10; \ | 133 | fsrc2 %x5, %f10; \ |
134 | fmovd %x6, %f12; \ | 134 | fsrc2 %x6, %f12; \ |
135 | fmovd %x7, %f14; | 135 | fsrc2 %x7, %f14; |
136 | #define FREG_LOAD_1(base, x0) \ | 136 | #define FREG_LOAD_1(base, x0) \ |
137 | EX_LD(LOAD(ldd, base + 0x00, %x0)) | 137 | EX_LD(LOAD(ldd, base + 0x00, %x0)) |
138 | #define FREG_LOAD_2(base, x0, x1) \ | 138 | #define FREG_LOAD_2(base, x0, x1) \ |
diff --git a/arch/sparc/lib/U1memcpy.S b/arch/sparc/lib/U1memcpy.S index bafd2fc07acb..b67142b7768e 100644 --- a/arch/sparc/lib/U1memcpy.S +++ b/arch/sparc/lib/U1memcpy.S | |||
@@ -109,7 +109,7 @@ | |||
109 | #define UNEVEN_VISCHUNK_LAST(dest, f0, f1, left) \ | 109 | #define UNEVEN_VISCHUNK_LAST(dest, f0, f1, left) \ |
110 | subcc %left, 8, %left; \ | 110 | subcc %left, 8, %left; \ |
111 | bl,pn %xcc, 95f; \ | 111 | bl,pn %xcc, 95f; \ |
112 | fsrc1 %f0, %f1; | 112 | fsrc2 %f0, %f1; |
113 | 113 | ||
114 | #define UNEVEN_VISCHUNK(dest, f0, f1, left) \ | 114 | #define UNEVEN_VISCHUNK(dest, f0, f1, left) \ |
115 | UNEVEN_VISCHUNK_LAST(dest, f0, f1, left) \ | 115 | UNEVEN_VISCHUNK_LAST(dest, f0, f1, left) \ |
@@ -201,7 +201,7 @@ FUNC_NAME: /* %o0=dst, %o1=src, %o2=len */ | |||
201 | andn %o1, (0x40 - 1), %o1 | 201 | andn %o1, (0x40 - 1), %o1 |
202 | and %g2, 7, %g2 | 202 | and %g2, 7, %g2 |
203 | andncc %g3, 0x7, %g3 | 203 | andncc %g3, 0x7, %g3 |
204 | fmovd %f0, %f2 | 204 | fsrc2 %f0, %f2 |
205 | sub %g3, 0x8, %g3 | 205 | sub %g3, 0x8, %g3 |
206 | sub %o2, %GLOBAL_SPARE, %o2 | 206 | sub %o2, %GLOBAL_SPARE, %o2 |
207 | 207 | ||
diff --git a/arch/sparc/lib/copy_page.S b/arch/sparc/lib/copy_page.S index b243d3b606ba..4d2df328e514 100644 --- a/arch/sparc/lib/copy_page.S +++ b/arch/sparc/lib/copy_page.S | |||
@@ -34,10 +34,10 @@ | |||
34 | #endif | 34 | #endif |
35 | 35 | ||
36 | #define TOUCH(reg0, reg1, reg2, reg3, reg4, reg5, reg6, reg7) \ | 36 | #define TOUCH(reg0, reg1, reg2, reg3, reg4, reg5, reg6, reg7) \ |
37 | fmovd %reg0, %f48; fmovd %reg1, %f50; \ | 37 | fsrc2 %reg0, %f48; fsrc2 %reg1, %f50; \ |
38 | fmovd %reg2, %f52; fmovd %reg3, %f54; \ | 38 | fsrc2 %reg2, %f52; fsrc2 %reg3, %f54; \ |
39 | fmovd %reg4, %f56; fmovd %reg5, %f58; \ | 39 | fsrc2 %reg4, %f56; fsrc2 %reg5, %f58; \ |
40 | fmovd %reg6, %f60; fmovd %reg7, %f62; | 40 | fsrc2 %reg6, %f60; fsrc2 %reg7, %f62; |
41 | 41 | ||
42 | .text | 42 | .text |
43 | 43 | ||
@@ -104,60 +104,60 @@ cheetah_copy_page_insn: | |||
104 | prefetch [%o1 + 0x140], #one_read | 104 | prefetch [%o1 + 0x140], #one_read |
105 | ldd [%o1 + 0x010], %f4 | 105 | ldd [%o1 + 0x010], %f4 |
106 | prefetch [%o1 + 0x180], #one_read | 106 | prefetch [%o1 + 0x180], #one_read |
107 | fmovd %f0, %f16 | 107 | fsrc2 %f0, %f16 |
108 | ldd [%o1 + 0x018], %f6 | 108 | ldd [%o1 + 0x018], %f6 |
109 | fmovd %f2, %f18 | 109 | fsrc2 %f2, %f18 |
110 | ldd [%o1 + 0x020], %f8 | 110 | ldd [%o1 + 0x020], %f8 |
111 | fmovd %f4, %f20 | 111 | fsrc2 %f4, %f20 |
112 | ldd [%o1 + 0x028], %f10 | 112 | ldd [%o1 + 0x028], %f10 |
113 | fmovd %f6, %f22 | 113 | fsrc2 %f6, %f22 |
114 | ldd [%o1 + 0x030], %f12 | 114 | ldd [%o1 + 0x030], %f12 |
115 | fmovd %f8, %f24 | 115 | fsrc2 %f8, %f24 |
116 | ldd [%o1 + 0x038], %f14 | 116 | ldd [%o1 + 0x038], %f14 |
117 | fmovd %f10, %f26 | 117 | fsrc2 %f10, %f26 |
118 | ldd [%o1 + 0x040], %f0 | 118 | ldd [%o1 + 0x040], %f0 |
119 | 1: ldd [%o1 + 0x048], %f2 | 119 | 1: ldd [%o1 + 0x048], %f2 |
120 | fmovd %f12, %f28 | 120 | fsrc2 %f12, %f28 |
121 | ldd [%o1 + 0x050], %f4 | 121 | ldd [%o1 + 0x050], %f4 |
122 | fmovd %f14, %f30 | 122 | fsrc2 %f14, %f30 |
123 | stda %f16, [%o0] ASI_BLK_P | 123 | stda %f16, [%o0] ASI_BLK_P |
124 | ldd [%o1 + 0x058], %f6 | 124 | ldd [%o1 + 0x058], %f6 |
125 | fmovd %f0, %f16 | 125 | fsrc2 %f0, %f16 |
126 | ldd [%o1 + 0x060], %f8 | 126 | ldd [%o1 + 0x060], %f8 |
127 | fmovd %f2, %f18 | 127 | fsrc2 %f2, %f18 |
128 | ldd [%o1 + 0x068], %f10 | 128 | ldd [%o1 + 0x068], %f10 |
129 | fmovd %f4, %f20 | 129 | fsrc2 %f4, %f20 |
130 | ldd [%o1 + 0x070], %f12 | 130 | ldd [%o1 + 0x070], %f12 |
131 | fmovd %f6, %f22 | 131 | fsrc2 %f6, %f22 |
132 | ldd [%o1 + 0x078], %f14 | 132 | ldd [%o1 + 0x078], %f14 |
133 | fmovd %f8, %f24 | 133 | fsrc2 %f8, %f24 |
134 | ldd [%o1 + 0x080], %f0 | 134 | ldd [%o1 + 0x080], %f0 |
135 | prefetch [%o1 + 0x180], #one_read | 135 | prefetch [%o1 + 0x180], #one_read |
136 | fmovd %f10, %f26 | 136 | fsrc2 %f10, %f26 |
137 | subcc %o2, 1, %o2 | 137 | subcc %o2, 1, %o2 |
138 | add %o0, 0x40, %o0 | 138 | add %o0, 0x40, %o0 |
139 | bne,pt %xcc, 1b | 139 | bne,pt %xcc, 1b |
140 | add %o1, 0x40, %o1 | 140 | add %o1, 0x40, %o1 |
141 | 141 | ||
142 | ldd [%o1 + 0x048], %f2 | 142 | ldd [%o1 + 0x048], %f2 |
143 | fmovd %f12, %f28 | 143 | fsrc2 %f12, %f28 |
144 | ldd [%o1 + 0x050], %f4 | 144 | ldd [%o1 + 0x050], %f4 |
145 | fmovd %f14, %f30 | 145 | fsrc2 %f14, %f30 |
146 | stda %f16, [%o0] ASI_BLK_P | 146 | stda %f16, [%o0] ASI_BLK_P |
147 | ldd [%o1 + 0x058], %f6 | 147 | ldd [%o1 + 0x058], %f6 |
148 | fmovd %f0, %f16 | 148 | fsrc2 %f0, %f16 |
149 | ldd [%o1 + 0x060], %f8 | 149 | ldd [%o1 + 0x060], %f8 |
150 | fmovd %f2, %f18 | 150 | fsrc2 %f2, %f18 |
151 | ldd [%o1 + 0x068], %f10 | 151 | ldd [%o1 + 0x068], %f10 |
152 | fmovd %f4, %f20 | 152 | fsrc2 %f4, %f20 |
153 | ldd [%o1 + 0x070], %f12 | 153 | ldd [%o1 + 0x070], %f12 |
154 | fmovd %f6, %f22 | 154 | fsrc2 %f6, %f22 |
155 | add %o0, 0x40, %o0 | 155 | add %o0, 0x40, %o0 |
156 | ldd [%o1 + 0x078], %f14 | 156 | ldd [%o1 + 0x078], %f14 |
157 | fmovd %f8, %f24 | 157 | fsrc2 %f8, %f24 |
158 | fmovd %f10, %f26 | 158 | fsrc2 %f10, %f26 |
159 | fmovd %f12, %f28 | 159 | fsrc2 %f12, %f28 |
160 | fmovd %f14, %f30 | 160 | fsrc2 %f14, %f30 |
161 | stda %f16, [%o0] ASI_BLK_P | 161 | stda %f16, [%o0] ASI_BLK_P |
162 | membar #Sync | 162 | membar #Sync |
163 | VISExitHalf | 163 | VISExitHalf |