diff options
author | Ulrich Drepper <drepper@redhat.com> | 1999-05-19 15:35:26 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1999-05-19 15:35:26 +0000 |
commit | 1c25bcacbe58057d511fb5eae19a0af5d43a2b75 (patch) | |
tree | 0c7bd762a77adcc1d12824bb211f54633e66c175 /sysdeps/sparc/sparc64/memcpy.S | |
parent | 2acd8fcfc4b8c76f34a304087c7a539102eddb6b (diff) | |
download | glibc-1c25bcacbe58057d511fb5eae19a0af5d43a2b75.tar.gz glibc-1c25bcacbe58057d511fb5eae19a0af5d43a2b75.tar.xz glibc-1c25bcacbe58057d511fb5eae19a0af5d43a2b75.zip |
Update.
1999-05-19 Jakub Jelinek <jj@ultra.linux.cz> * sysdeps/generic/bits/elfclass.h: Version common to wordsize-32 and wordsize-64. * sysdeps/generic/bits/environments.h: Ditto. * sysdeps/generic/stdint.h: Ditto. * sysdeps/generic/inttypes.h: Ditto. * sysdeps/generic/bits/wordsize.h: New file. * stdlib/Makefile: Add bits/wordsize.h to headers. * sysdeps/sparc/sparc64/bits/wordsize.h: New file. * sysdeps/sparc/sparc64/fpu/bits/fenv.h: Allow the same exported headers to be used for 32bit and 64bit ABI compilations. * sysdeps/sparc/sparc64/fpu/fpu_control.h: Ditto. * sysdeps/unix/sysv/linux/sparc/sparc64/bits/setjmp.h: Ditto. * sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Ditto. * sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h: Ditto. * sysdeps/unix/sysv/linux/sparc/sparc64/sys/ucontext.h: Ditto. * sysdeps/wordsize-64/bits/elfclass.h: Remove. * sysdeps/wordsize-64/bits/environments.h: Remove. * sysdeps/wordsize-64/stdint.h: Remove. * sysdeps/wordsize-64/inttypes.h: Remove. * sysdeps/wordsize-64/bits/wordsize.h: New file. * sysdeps/wordsize-32/bits/elfclass.h: Remove. * sysdeps/wordsize-32/bits/environments.h: Remove. * sysdeps/wordsize-32/stdint.h: Remove. * sysdeps/wordsize-32/inttypes.h: Remove. * sysdeps/wordsize-32/bits/wordsize.h: New file. 1999-05-19 Jakub Jelinek <jj@ultra.linux.cz> * sysdeps/sparc/sparc64/memcpy.S (__align_cpy_4, __align_cpy_8, __align_cpy_16): New functions. (__align_cpy_2, __align_cpy_1): New aliases to memcpy. * sysdeps/sparc/sparc32/Versions: New file. * sysdeps/sparc/sparc64/Versions: New file. * sysdeps/sparc/Versions: Remove. 1999-05-19 Jakub Jelinek <jj@ultra.linux.cz> * sysdeps/unix/sysv/linux/configure.in: On sparc64-*-linux*, set slibdir to /lib64 if prefix is /usr, plus set libdir to ${exec_prefix}/lib64. * sysdeps/unix/sysv/linux/configure: Regenerated. * config.make.in: Propagate libdir settings from configure to the Makefiles. * shlib-versions: sparc64-*-linux* dynamic linker is /lib64/ld-linux.so.2.
Diffstat (limited to 'sysdeps/sparc/sparc64/memcpy.S')
-rw-r--r-- | sysdeps/sparc/sparc64/memcpy.S | 73 |
1 files changed, 69 insertions, 4 deletions
diff --git a/sysdeps/sparc/sparc64/memcpy.S b/sysdeps/sparc/sparc64/memcpy.S index fa08507d0c..180ff23e20 100644 --- a/sysdeps/sparc/sparc64/memcpy.S +++ b/sysdeps/sparc/sparc64/memcpy.S @@ -380,6 +380,66 @@ END(bcopy) 209: retl mov %g4, %o0 +#ifdef USE_BPR + + /* void *__align_cpy_4(void *dest, void *src, size_t n) + * SPARC v9 SYSV ABI + * Like memcpy, but results are undefined if (!n || ((dest | src | n) & 3)) + */ + + .align 32 +ENTRY(__align_cpy_4) + mov %o0, %g4 /* IEU0 Group */ + cmp %o2, 15 /* IEU1 */ + bleu,pn %xcc, 208b /* CTI */ + cmp %o2, (64 * 6) /* IEU1 Group */ + bgeu,pn %xcc, 200b /* CTI */ + andcc %o0, 7, %g2 /* IEU1 Group */ + ba,pt %xcc, 216f /* CTI */ + andcc %o1, 4, %g0 /* IEU1 Group */ +END(__align_cpy_4) + + /* void *__align_cpy_8(void *dest, void *src, size_t n) + * SPARC v9 SYSV ABI + * Like memcpy, but results are undefined if (!n || ((dest | src | n) & 7)) + */ + + .align 32 +ENTRY(__align_cpy_8) + mov %o0, %g4 /* IEU0 Group */ + cmp %o2, 15 /* IEU1 */ + bleu,pn %xcc, 208b /* CTI */ + cmp %o2, (64 * 6) /* IEU1 Group */ + bgeu,pn %xcc, 201b /* CTI */ + andcc %o0, 0x38, %g5 /* IEU1 Group */ + andcc %o2, -128, %g7 /* IEU1 Group */ + bne,a,pt %xcc, 82f + 4 /* CTI */ + ldx [%o1], %g1 /* Load */ + ba,pt %xcc, 41f /* CTI Group */ + andcc %o2, 0x70, %g7 /* IEU1 */ +END(__align_cpy_8) + + /* void *__align_cpy_16(void *dest, void *src, size_t n) + * SPARC v9 SYSV ABI + * Like memcpy, but results are undefined if (!n || ((dest | src | n) & 15)) + */ + + .align 32 +ENTRY(__align_cpy_16) + mov %o0, %g4 /* IEU0 Group */ + cmp %o2, (64 * 6) /* IEU1 */ + bgeu,pn %xcc, 201b /* CTI */ + andcc %o0, 0x38, %g5 /* IEU1 Group */ + andcc %o2, -128, %g7 /* IEU1 Group */ + bne,a,pt %xcc, 82f + 4 /* CTI */ + ldx [%o1], %g1 /* Load */ + ba,pt %xcc, 41f /* CTI Group */ + andcc %o2, 0x70, %g7 /* IEU1 */ +END(__align_cpy_16) + +#endif + + .align 32 ENTRY(memcpy) 210: #ifndef USE_BPR @@ -396,7 +456,7 @@ ENTRY(memcpy) andcc %g5, 3, %o5 /* IEU1 Group */ bne,pn %xcc, 212f /* CTI */ andcc %o1, 3, %g0 /* IEU1 Group */ - be,a,pt %xcc, 3f /* CTI */ + be,a,pt %xcc, 216f /* CTI */ andcc %o1, 4, %g0 /* IEU1 Group */ andcc %o1, 1, %g0 /* IEU1 Group */ be,pn %xcc, 4f /* CTI */ @@ -413,7 +473,7 @@ ENTRY(memcpy) sub %o2, 2, %o2 /* IEU0 */ sth %g2, [%o0 - 2] /* Store Group + bubble */ 5: andcc %o1, 4, %g0 /* IEU1 */ -3: be,a,pn %xcc, 2f /* CTI */ +216: be,a,pn %xcc, 2f /* CTI */ andcc %o2, -128, %g7 /* IEU1 Group */ lduw [%o1], %g5 /* Load Group */ add %o1, 4, %o1 /* IEU0 */ @@ -421,7 +481,7 @@ ENTRY(memcpy) sub %o2, 4, %o2 /* IEU0 Group */ stw %g5, [%o0 - 4] /* Store */ andcc %o2, -128, %g7 /* IEU1 Group */ -2: be,pn %xcc, 3f /* CTI */ +2: be,pn %xcc, 215f /* CTI */ andcc %o0, 4, %g0 /* IEU1 Group */ be,pn %xcc, 82f + 4 /* CTI Group */ 5: MOVE_BIGCHUNK(o1, o0, 0x00, g1, g3, g5, o5) @@ -432,7 +492,7 @@ ENTRY(memcpy) add %o1, 128, %o1 /* IEU0 */ bne,pt %xcc, 5b /* CTI */ add %o0, 128, %o0 /* IEU0 Group */ -3: andcc %o2, 0x70, %g7 /* IEU1 Group */ +215: andcc %o2, 0x70, %g7 /* IEU1 Group */ 41: be,pn %xcc, 80f /* CTI */ andcc %o2, 8, %g0 /* IEU1 Group */ /* Clk1 8-( */ @@ -572,3 +632,8 @@ ENTRY(memcpy) retl mov %g4, %o0 END(memcpy) + +#ifdef USE_BPR +weak_alias(memcpy, __align_cpy_1) +weak_alias(memcpy, __align_cpy_2) +#endif |