Commit 6f1d827f authored by David S. Miller's avatar David S. Miller

sparc64: Consistently use fsrc2 rather than fmovd in optimized asm.

Because fsrc2, unlike fmovd, does not update the %fsr register.
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d1346a6c
...@@ -90,49 +90,49 @@ ...@@ -90,49 +90,49 @@
faligndata %x7, %x8, %f14; faligndata %x7, %x8, %f14;
#define FREG_MOVE_1(x0) \ #define FREG_MOVE_1(x0) \
fmovd %x0, %f0; fsrc2 %x0, %f0;
#define FREG_MOVE_2(x0, x1) \ #define FREG_MOVE_2(x0, x1) \
fmovd %x0, %f0; \ fsrc2 %x0, %f0; \
fmovd %x1, %f2; fsrc2 %x1, %f2;
#define FREG_MOVE_3(x0, x1, x2) \ #define FREG_MOVE_3(x0, x1, x2) \
fmovd %x0, %f0; \ fsrc2 %x0, %f0; \
fmovd %x1, %f2; \ fsrc2 %x1, %f2; \
fmovd %x2, %f4; fsrc2 %x2, %f4;
#define FREG_MOVE_4(x0, x1, x2, x3) \ #define FREG_MOVE_4(x0, x1, x2, x3) \
fmovd %x0, %f0; \ fsrc2 %x0, %f0; \
fmovd %x1, %f2; \ fsrc2 %x1, %f2; \
fmovd %x2, %f4; \ fsrc2 %x2, %f4; \
fmovd %x3, %f6; fsrc2 %x3, %f6;
#define FREG_MOVE_5(x0, x1, x2, x3, x4) \ #define FREG_MOVE_5(x0, x1, x2, x3, x4) \
fmovd %x0, %f0; \ fsrc2 %x0, %f0; \
fmovd %x1, %f2; \ fsrc2 %x1, %f2; \
fmovd %x2, %f4; \ fsrc2 %x2, %f4; \
fmovd %x3, %f6; \ fsrc2 %x3, %f6; \
fmovd %x4, %f8; fsrc2 %x4, %f8;
#define FREG_MOVE_6(x0, x1, x2, x3, x4, x5) \ #define FREG_MOVE_6(x0, x1, x2, x3, x4, x5) \
fmovd %x0, %f0; \ fsrc2 %x0, %f0; \
fmovd %x1, %f2; \ fsrc2 %x1, %f2; \
fmovd %x2, %f4; \ fsrc2 %x2, %f4; \
fmovd %x3, %f6; \ fsrc2 %x3, %f6; \
fmovd %x4, %f8; \ fsrc2 %x4, %f8; \
fmovd %x5, %f10; fsrc2 %x5, %f10;
#define FREG_MOVE_7(x0, x1, x2, x3, x4, x5, x6) \ #define FREG_MOVE_7(x0, x1, x2, x3, x4, x5, x6) \
fmovd %x0, %f0; \ fsrc2 %x0, %f0; \
fmovd %x1, %f2; \ fsrc2 %x1, %f2; \
fmovd %x2, %f4; \ fsrc2 %x2, %f4; \
fmovd %x3, %f6; \ fsrc2 %x3, %f6; \
fmovd %x4, %f8; \ fsrc2 %x4, %f8; \
fmovd %x5, %f10; \ fsrc2 %x5, %f10; \
fmovd %x6, %f12; fsrc2 %x6, %f12;
#define FREG_MOVE_8(x0, x1, x2, x3, x4, x5, x6, x7) \ #define FREG_MOVE_8(x0, x1, x2, x3, x4, x5, x6, x7) \
fmovd %x0, %f0; \ fsrc2 %x0, %f0; \
fmovd %x1, %f2; \ fsrc2 %x1, %f2; \
fmovd %x2, %f4; \ fsrc2 %x2, %f4; \
fmovd %x3, %f6; \ fsrc2 %x3, %f6; \
fmovd %x4, %f8; \ fsrc2 %x4, %f8; \
fmovd %x5, %f10; \ fsrc2 %x5, %f10; \
fmovd %x6, %f12; \ fsrc2 %x6, %f12; \
fmovd %x7, %f14; fsrc2 %x7, %f14;
#define FREG_LOAD_1(base, x0) \ #define FREG_LOAD_1(base, x0) \
EX_LD(LOAD(ldd, base + 0x00, %x0)) EX_LD(LOAD(ldd, base + 0x00, %x0))
#define FREG_LOAD_2(base, x0, x1) \ #define FREG_LOAD_2(base, x0, x1) \
......
...@@ -109,7 +109,7 @@ ...@@ -109,7 +109,7 @@
#define UNEVEN_VISCHUNK_LAST(dest, f0, f1, left) \ #define UNEVEN_VISCHUNK_LAST(dest, f0, f1, left) \
subcc %left, 8, %left; \ subcc %left, 8, %left; \
bl,pn %xcc, 95f; \ bl,pn %xcc, 95f; \
fsrc1 %f0, %f1; fsrc2 %f0, %f1;
#define UNEVEN_VISCHUNK(dest, f0, f1, left) \ #define UNEVEN_VISCHUNK(dest, f0, f1, left) \
UNEVEN_VISCHUNK_LAST(dest, f0, f1, left) \ UNEVEN_VISCHUNK_LAST(dest, f0, f1, left) \
...@@ -201,7 +201,7 @@ FUNC_NAME: /* %o0=dst, %o1=src, %o2=len */ ...@@ -201,7 +201,7 @@ FUNC_NAME: /* %o0=dst, %o1=src, %o2=len */
andn %o1, (0x40 - 1), %o1 andn %o1, (0x40 - 1), %o1
and %g2, 7, %g2 and %g2, 7, %g2
andncc %g3, 0x7, %g3 andncc %g3, 0x7, %g3
fmovd %f0, %f2 fsrc2 %f0, %f2
sub %g3, 0x8, %g3 sub %g3, 0x8, %g3
sub %o2, %GLOBAL_SPARE, %o2 sub %o2, %GLOBAL_SPARE, %o2
......
...@@ -34,10 +34,10 @@ ...@@ -34,10 +34,10 @@
#endif #endif
#define TOUCH(reg0, reg1, reg2, reg3, reg4, reg5, reg6, reg7) \ #define TOUCH(reg0, reg1, reg2, reg3, reg4, reg5, reg6, reg7) \
fmovd %reg0, %f48; fmovd %reg1, %f50; \ fsrc2 %reg0, %f48; fsrc2 %reg1, %f50; \
fmovd %reg2, %f52; fmovd %reg3, %f54; \ fsrc2 %reg2, %f52; fsrc2 %reg3, %f54; \
fmovd %reg4, %f56; fmovd %reg5, %f58; \ fsrc2 %reg4, %f56; fsrc2 %reg5, %f58; \
fmovd %reg6, %f60; fmovd %reg7, %f62; fsrc2 %reg6, %f60; fsrc2 %reg7, %f62;
.text .text
...@@ -104,60 +104,60 @@ cheetah_copy_page_insn: ...@@ -104,60 +104,60 @@ cheetah_copy_page_insn:
prefetch [%o1 + 0x140], #one_read prefetch [%o1 + 0x140], #one_read
ldd [%o1 + 0x010], %f4 ldd [%o1 + 0x010], %f4
prefetch [%o1 + 0x180], #one_read prefetch [%o1 + 0x180], #one_read
fmovd %f0, %f16 fsrc2 %f0, %f16
ldd [%o1 + 0x018], %f6 ldd [%o1 + 0x018], %f6
fmovd %f2, %f18 fsrc2 %f2, %f18
ldd [%o1 + 0x020], %f8 ldd [%o1 + 0x020], %f8
fmovd %f4, %f20 fsrc2 %f4, %f20
ldd [%o1 + 0x028], %f10 ldd [%o1 + 0x028], %f10
fmovd %f6, %f22 fsrc2 %f6, %f22
ldd [%o1 + 0x030], %f12 ldd [%o1 + 0x030], %f12
fmovd %f8, %f24 fsrc2 %f8, %f24
ldd [%o1 + 0x038], %f14 ldd [%o1 + 0x038], %f14
fmovd %f10, %f26 fsrc2 %f10, %f26
ldd [%o1 + 0x040], %f0 ldd [%o1 + 0x040], %f0
1: ldd [%o1 + 0x048], %f2 1: ldd [%o1 + 0x048], %f2
fmovd %f12, %f28 fsrc2 %f12, %f28
ldd [%o1 + 0x050], %f4 ldd [%o1 + 0x050], %f4
fmovd %f14, %f30 fsrc2 %f14, %f30
stda %f16, [%o0] ASI_BLK_P stda %f16, [%o0] ASI_BLK_P
ldd [%o1 + 0x058], %f6 ldd [%o1 + 0x058], %f6
fmovd %f0, %f16 fsrc2 %f0, %f16
ldd [%o1 + 0x060], %f8 ldd [%o1 + 0x060], %f8
fmovd %f2, %f18 fsrc2 %f2, %f18
ldd [%o1 + 0x068], %f10 ldd [%o1 + 0x068], %f10
fmovd %f4, %f20 fsrc2 %f4, %f20
ldd [%o1 + 0x070], %f12 ldd [%o1 + 0x070], %f12
fmovd %f6, %f22 fsrc2 %f6, %f22
ldd [%o1 + 0x078], %f14 ldd [%o1 + 0x078], %f14
fmovd %f8, %f24 fsrc2 %f8, %f24
ldd [%o1 + 0x080], %f0 ldd [%o1 + 0x080], %f0
prefetch [%o1 + 0x180], #one_read prefetch [%o1 + 0x180], #one_read
fmovd %f10, %f26 fsrc2 %f10, %f26
subcc %o2, 1, %o2 subcc %o2, 1, %o2
add %o0, 0x40, %o0 add %o0, 0x40, %o0
bne,pt %xcc, 1b bne,pt %xcc, 1b
add %o1, 0x40, %o1 add %o1, 0x40, %o1
ldd [%o1 + 0x048], %f2 ldd [%o1 + 0x048], %f2
fmovd %f12, %f28 fsrc2 %f12, %f28
ldd [%o1 + 0x050], %f4 ldd [%o1 + 0x050], %f4
fmovd %f14, %f30 fsrc2 %f14, %f30
stda %f16, [%o0] ASI_BLK_P stda %f16, [%o0] ASI_BLK_P
ldd [%o1 + 0x058], %f6 ldd [%o1 + 0x058], %f6
fmovd %f0, %f16 fsrc2 %f0, %f16
ldd [%o1 + 0x060], %f8 ldd [%o1 + 0x060], %f8
fmovd %f2, %f18 fsrc2 %f2, %f18
ldd [%o1 + 0x068], %f10 ldd [%o1 + 0x068], %f10
fmovd %f4, %f20 fsrc2 %f4, %f20
ldd [%o1 + 0x070], %f12 ldd [%o1 + 0x070], %f12
fmovd %f6, %f22 fsrc2 %f6, %f22
add %o0, 0x40, %o0 add %o0, 0x40, %o0
ldd [%o1 + 0x078], %f14 ldd [%o1 + 0x078], %f14
fmovd %f8, %f24 fsrc2 %f8, %f24
fmovd %f10, %f26 fsrc2 %f10, %f26
fmovd %f12, %f28 fsrc2 %f12, %f28
fmovd %f14, %f30 fsrc2 %f14, %f30
stda %f16, [%o0] ASI_BLK_P stda %f16, [%o0] ASI_BLK_P
membar #Sync membar #Sync
VISExitHalf VISExitHalf
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment